无法正确获取 WKWebView 内容高度

Tom*_*Tom 1 ios swift wkwebview

我正在尝试获取 WKWebView 中呈现的文本的高度,以便以后可以调整视图的大小以适应它。我正在使用下面的代码,它确实通过result. 但是,如果我缩短(或延长)htmlString,该值不会改变。有什么建议?

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {

var webView: WKWebView!

var htmlString: String = "<!DOCTYPE html><html><body><p>Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.</p></body></html>"

override func viewDidLoad() {
    super.viewDidLoad()

    //Instantiate with initial frame
    webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 100), configuration: WKWebViewConfiguration())
    self.view.addSubview(webView)

    webView.loadHTMLString(htmlString, baseURL: nil)

    webView.evaluateJavaScript(("document.body.scrollHeight"), completionHandler: { result, error in
        print(result)
    })
}

}
Run Code Online (Sandbox Code Playgroud)

Ame*_*kic 5

您的代码的问题在于您document.body.scrollHeight在加载 HTML 字符串后立即进行评估。要获得正确的高度,您必须等待 HTML 加载,这需要一些时间,尤其是在您第一次加载 HTML 字符串时。
这就是为什么您必须document.body.scrollHeight在此委托方法中进行评估:

 func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
      webView.evaluateJavaScript("document.documentElement.scrollHeight") { (height, error) in
        print(height as! CGFloat)
      }
  }
Run Code Online (Sandbox Code Playgroud)

我已经写过关于这个问题以及如何在这篇博文中使用 CSS 中的自定义字体的情况下找到正确的高度。