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

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

0 голосов
/ 10 сентября 2018

Я пытался использовать 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
    }
}

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

enter image description here

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

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

1 Ответ

0 голосов
/ 10 сентября 2018

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

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))
...