WKWebViewの表示が遅いのをなんとかしたかった
WKWebViewはWebページを完全に読み込むまで白い画面になってしまう為遅く感じられいます。
なんとかしたい!
色々試した結果
色々試した結果、2つのことがわかりました。
・一度読み込んだページは2回目の読み込みが早いこと
・別の画面でLoadをしてもLoadされた状態が残ること
サンプル
FirstViewController
ViewDidLoadで事前にWeb画面をロードしておく
import UIKit
import WebKit
class ViewController: UIViewController {
var webView:WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView()
webView?.load(URLRequest(url: URL(string: "https://www.google.co.jp/")!))
}
@IBAction func buttonTapped(_ sender: Any) {
let vc = WebViewController(webView: webView!)
self.present(vc, animated: true)
}
}
WKWebViewController
前の画面からWKWebviewを受け取り表示を行う。別タブを開くと新しくロードされてしまう為結局白い画面の時間が発生してしまう。
import UIKit
import WebKit
class WebViewController: UIViewController {
let webView: WKWebView
init (webView: WKWebView){
self.webView = webView
super.init(nibName: String(describing: WebViewController.self), bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(webView)
constraint()
}
func constraint() {
webView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0.0).isActive = true
webView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0.0).isActive = true
webView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0.0).isActive = true
webView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0.0).isActive = true
}
}
extension WebViewController: WKUIDelegate, WKNavigationDelegate {
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration,
for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
return nil
}
}
困ること、やなこと
・1遷移先のWebページで遷移する際、白背景にはならないが結局遅延が発生してしまう。
・複数ページ遷移先が決まっている際に他の画面で複数WKWebViewのインスタンスを保持しておかなければいけない。
しかし、調べた結果ではこれ以外の解決策を思いつくことができませんでした。
1番いいのは遷移先のWebページが軽いこと!!!!!