hachinoBlog

hachinobuのエンジニアライフ

WKWebViewのscrollの高さを動的に読み込む方法

背景

セルにWKWebView引いてコンテンツを読み込ませて、読み込み後のスクロールの高さを取得して、セルの高さにしたかったけど色々つまったので備忘録

解決方法

StackOverFlowに載ってる方法でほぼ問題なし

How to determine the content size of a WKWebView?

だけど、1点だけうまくいかなかったのが、高さを取得する時に navigationDelegatefunc webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)メソッド内で高さの取得を

webView.evaluateJavaScript("document.body.offsetHeight", completionHandler: { (height, error) in
                            
})

で取得すると、正しい高さよりも激しく大きな数値が返ってきてしまい、スクロールすると余白だらけになってしまった。

なので、

webView.scrollView.contentSize.height

で取得するようにしたら正しいのが取れた

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        
        webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
            if complete != nil {
                print(webView.scrollView.contentSize) //正しいの取れる
            }
        })
}