如何检查 UIWebView 是否已从项目中完全移除?
解决办法是:
- 打开终端。在终端中打开您的项目根文件夹。
- 运行命令:grep -r "UIWebView" 。
- 此命令将列出所有包含“UIWebView”的 pod。不更新这些 pod 或删除这些 pod 并再次执行第 2 步命令。重复直到所有“UIWebView”匹配都没有被删除。
以下是指导您将现有 UIWebView 更新为 WKWebView 的一些步骤。
将“WebKit”类导入控制器。
假设您正在使用一个名为“webViewMain”的 UIWebView。然后转到您的故事板,只需将 UIWebView 替换为 UIView。确保您向 UIView 添加了与添加到 UIWebView 相同的约束。将新 UIView 中的 @IBOutlet 绘制到 UIWebView 的现有 @IBOutlet。
此处需要将@IBOutlet 的类从UIWebView 更改为UIView,因为您已将UIWebView 替换为UIView。
旧代码:@IBOutlet weak var webViewMain: UIWebView!
新代码:@IBOutlet weak var webViewMain: UIView!
然后新建一个变量来创建一个新的WKWebView。
代码:var webView : WKWebView!
在 UIWebView 中加载 request/html 的位置添加以下代码:
// WKWebView
// init and load request in webview.
webView = WKWebView(frame: self.webViewMain.frame)
webView.navigationDelegate = self
self.webView.load(request)
self.webViewMain.addSubview(webView)
webView.translatesAutoresizingMaskIntoConstraints = false
// Adding constraints from webView(WKWebView) to webViewMain (UIView)
webView.leadingAnchor.constraint(equalTo: webViewMain.leadingAnchor, constant: 0).isActive = true
webView.trailingAnchor.constraint(equalTo: webViewMain.trailingAnchor, constant: 0).isActive = true
webView.topAnchor.constraint(equalTo: webViewMain.topAnchor, constant: 0).isActive = true
webView.bottomAnchor.constraint(equalTo: webViewMain.bottomAnchor, constant: 0).isActive = true
// WKWebView
到目前为止,您已经将 UIWebView 替换为 WKWebView 。
现在是委托方法。
UIWebView 有委托类: UIWebViewDelegate
WKWebView 有委托类:WKNavigationDelegate
将 UIWebViewDelegate 替换为 WKNavigationDelegate。
现在来比较 UIWebView 与 WKWebView 的委托方法:
UIWebView: func webViewDidFinishLoad(_ webView: UIWebView)
WKWebView:func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
UIWebView: func webViewDidStartLoad(_ webView: UIWebView)
WKWebView:func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
UIWebView: func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool
在这里,我们返回 true/false 以加载/取消导航。
WKWebView:func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
这里我们返回decisionHandler(.allow)/decisionHandler(.cancel)来加载/取消导航。
缩放方面适合 webView (WKWebView) 的内容。
var scriptContent = "var meta = document.createElement('meta');"
scriptContent += "meta.name='viewport';"
scriptContent += "meta.content='width=device-width';"
scriptContent += "document.getElementsByTagName('head')[0].appendChild(meta);"
webView.evaluateJavaScript(scriptContent, completionHandler: nil)
设置 webView 的高度:
webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
if complete != nil {
self.webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in
self.constraintWebViewProductDescriptionHeight.constant = height as! CGFloat
})
}
})