Я пытался использовать 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
}
}
Изображение раскадровки:
Я на самом деле перехожу к представлению, но оно пустое. Когда я отлаживаю, мой код выполняет «webView.load (myRequest)», но я ничего не вижу на экране.
Что еще мне не хватает?
ваш код выглядит правильно, я думаю, вам нужно проверить методы делегата, в противном случае вы можете загрузить страницу www.google.com в целях тестирования для 100% успеха
Я попытался загрузить Google, и он работал нормально. Затем я попробовал свой URL-адрес, и, поскольку он имеет http, а не https, он не загружается. Думаю, мне придется обновить строку URL-адреса до https. Спасибо!
это здорово, что вы нашли решение, а затем проигнорируйте мой ответ :) Я столкнулся с той же проблемой в пятницу, и проблема была в программном ограничении. хорошего дня
Прежде всего проверьте, что ваше представление 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))
Можете ли вы проверить, выполняется ли ваш метод делегата по завершению запроса или при ошибке?