Использование WKWebView в iOS 10

Я пытался использовать WKWebView в iOS 10 и обнаружил ошибку, связанную с NSCoding.

В поисках я наткнулся на эта статья и решил реализовать его программно.

Я добавил контроллер представления в раскадровку, а затем добавляю WKUIDelegate в свой контроллер. Однако даже после этого я не вижу, чтобы веб-страница отображалась на моем экране.

Контроллер моего представления, действующий как код веб-представления:

import UIKit
import WebKit

class WebViewController: UIViewController, WKUIDelegate {
    var webView: WKWebView!
    var articleURL: URL?
    @IBOutlet var webViewContainer: UIView!

    override func loadView() {
        super.loadView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let webConfiguration = WKWebViewConfiguration()
        let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.webViewContainer.frame.size.height))
        self.webView = WKWebView (frame: customFrame , configuration: webConfiguration)
        webView.translatesAutoresizingMaskIntoConstraints = false
        self.webViewContainer.addSubview(webView)
        webView.topAnchor.constraint(equalTo: webViewContainer.topAnchor).isActive = true
        webView.rightAnchor.constraint(equalTo: webViewContainer.rightAnchor).isActive = true
        webView.leftAnchor.constraint(equalTo: webViewContainer.leftAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: webViewContainer.bottomAnchor).isActive = true
        webView.heightAnchor.constraint(equalTo: webViewContainer.heightAnchor).isActive = true
        webView.uiDelegate = self

        guard let url = articleURL else {
            return
        }
        let myRequest = URLRequest(url: url)
        webView.load(myRequest)
    }
}

Я перехожу на этот контроллер с моего предыдущего контроллера. Код для перехода:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "webPage" {
        let controller = (segue.destination as? WebViewController)!
        controller.articleURL = movieReview?.articleURL
    }
}

Изображение раскадровки:

Использование WKWebView в iOS 10

Я на самом деле перехожу к представлению, но оно пустое. Когда я отлаживаю, мой код выполняет «webView.load (myRequest)», но я ничего не вижу на экране.

Что еще мне не хватает?

Можете ли вы проверить, выполняется ли ваш метод делегата по завершению запроса или при ошибке?

Shauket Sheikh 10.09.2018 03:12

ваш код выглядит правильно, я думаю, вам нужно проверить методы делегата, в противном случае вы можете загрузить страницу www.google.com в целях тестирования для 100% успеха

Shauket Sheikh 10.09.2018 03:13

Я попытался загрузить Google, и он работал нормально. Затем я попробовал свой URL-адрес, и, поскольку он имеет http, а не https, он не загружается. Думаю, мне придется обновить строку URL-адреса до https. Спасибо!

tech_human 10.09.2018 03:20

это здорово, что вы нашли решение, а затем проигнорируйте мой ответ :) Я столкнулся с той же проблемой в пятницу, и проблема была в программном ограничении. хорошего дня

Shauket Sheikh 10.09.2018 03:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
2 580
1

Ответы 1

Прежде всего проверьте, что ваше представление webViewContainer связано с вашим контроллером просмотра раскадровки. если он уже подключен и на нем правильно настроены ограничения. затем сделайте ограничение для веб-просмотра таким образом. Добавьте ограничение из self.view, а не из self.webview, после добавления в контейнер веб-просмотр является дочерним по отношению к вашему родительскому представлению, поэтому лучше всего добавить ограничение из self.view в ваш веб-просмотр. Надеюсь, это сработает.

self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .trailing, relatedBy: .equal, toItem: self.webViewContainer, attribute: .trailing, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .leading, relatedBy: .equal, toItem: self.webViewContainer, attribute: .leading, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .top, relatedBy: .equal, toItem: self.webViewContainer, attribute: .top, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: webView, attribute: .bottom, relatedBy: .equal, toItem: self.webViewContainer, attribute: .bottom, multiplier: 1, constant: 0))

Другие вопросы по теме