引言
UIWebView 和 WKWebView 的區(qū)別
WKWebView 更快(占用內(nèi)存可能只有 UIWebView 的1/3~1/4),沒有緩存,更為細致地拆分了 UIWebViewDelegate 中的方法。
想要了解更多關(guān)于 WKWebView 的特性的,可以自行百度,這里你可以簡單地把它當(dāng)做是輕量級的 UIWebView。
為什么現(xiàn)在是時候從 UIWebView 遷移到 WKWebView 了:
到目前為止,iOS 9 占有率已達 58.55%,iOS 8 占有率達到了 34.78%,iOS 7 及更早版本是 6.66%,而剩下的6.66% 應(yīng)該大部分都是對手機使用極度不頻繁的人。所以從現(xiàn)在開始,再開發(fā) App 只兼容 iOS 8 和 iOS 9 兩個版本就可以了,除非你對你的產(chǎn)品覆蓋率有非常高的要求。WKWebView 是 iOS 8 之后才有的 WebKit 中的內(nèi)容,所以之前我們要同時兼容 iOS 7 和 iOS 8 的時候,可以推辭說 UIWebView 和 WKWebView 一起做太麻煩了,現(xiàn)在可沒有理由拒絕新東西了。
正文
常用代理方法
在 WKWebView 中,UIWebViewDelegate 與 UIWebView 被重構(gòu)成了14類與3個協(xié)議,下面給出一些在 UIWebView 中常用的方法的 WKWebView 版本。
//準備加載頁面
UIWebViewDelegate - webView:shouldStartLoadWithRequest:navigationType
WKNavigationDelegate -webView:didStartProvisionalNavigation:
//已開始加載頁面,可以在這一步向view中添加一個過渡動畫
UIWebViewDelegate - webViewDidStartLoad:
WKNavigationDelegate - webView:didCommitNavigation:
//頁面已全部加載,可以在這一步把過渡動畫去掉
UIWebViewDelegate - webViewDidFinishLoad:
WKNavigationDelegate - webView:didFinishNavigation:
//加載頁面失敗
UIWebViewDelegate - webView:didFailLoadWithError:
WKNavigationDelegate - webView:didFailNavigation:withError:
WKNavigationDelegate - webView:didFailProvisionalNavigation:withError:
以上方法分別存在于 UIWebViewDelegate 和 WKNavigationDelegate 中。
如果你之前只是用到了以上列出的 UIWebViewDelegate 中的幾個方法,那么只是簡單地換一個方法名,讓你的 ViewController 繼承 WKNavigationDelegate ,繼續(xù)用就可以了。想要更多內(nèi)容可以自己用 cmd鍵+鼠標左擊『WKNavigationDelegate』通過 Xcode 查看。
要注意的是 webview.delegate = self 需要改寫為 webview.navigationDelegate = self。