iOS 如果取得 UIWebView 中的內容高度

最近碰到一個狀況,需要等待 Web 的內容完全讀取完畢後得到其內容高度再重新設定 View 的大小。

直接想到的方式是使用 Scroll View 的 Content Size 來獲取高度:

var height = webView.scrollView.contentSize.height
print("height: \(height)")

在執行幾次後,發現同樣 HTML 內容在 Web View 讀取完畢後的 contentSize 都會有些不同。查詢一下資料後發現可以使用:
func stringByEvaluatingJavaScriptFromString(_ script: String) -> String?
透過 JavaScript 的方式來獲取 JavaScript 元素確認高度。

let result = webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight")
if let string = result {
var height = NSNumberFormatter().numberFromString(string) as! CGFloat
print("height: \(height)")
}

感覺上面的程式還有修改空間,原因如下:

- stringByEvaluatingJavaScriptFromString:
Returns the result of running a JavaScript script. Although this method is not deprecated, best practice is to use the evaluateJavaScript:completionHandler: method of the WKWebView class instead.

下次再找個時間來實作比較看看,這次就久違的文章就寫到這了。 :D

Like what you read? Give 楢榼 a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.