在iOS 10中使用WKWebView

时间:2018-09-10 01:01:29

标签: ios swift wkwebview

我试图在iOS 10中使用WKWebView并遇到与NSCoding相关的错误。

在搜索它时,我遇到了this article,因此决定以编程方式实现它。

我在情节提要中添加了一个视图控制器,然后将WKUIDelegate添加到了我的控制器中。但是即使在那之后,我仍然看不到屏幕上显示的网页。

我的视图控制器充当Web视图代码:

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 :(得分:0)

首先,在情节提要viewcontroller中检查您的 webViewContainer 视图是否已连接。如果已经连接并且约束设置正确。然后以这种方式对webview进行约束。从 self.view 中添加约束,而不是从 self.webview 中添加约束,添加到容器中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))