【问题标题】:When the WKWebView frame is resized, the content size broken当 WKWebView 框架调整大小时,内容大小损坏
【发布时间】:2021-03-21 16:46:59
【问题描述】:
在做 didFinishNavigation 之后,我尝试调整 WKWebView 框架的大小,导致加载的内容大幅调整大小。如何避免这种情况?
例如,加载页面后,我想从 WKWebView 中获取信息,使用评估 JavaScript 来调整内容的大小并将 WKWebView 设置为适当的大小。
【问题讨论】:
标签:
ios
swift
objective-c
wkwebview
【解决方案1】:
您可以在加载时使用以下代码设置 webview 高度
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.documentElement.scrollHeight", completionHandler: { (height, error) in
self.webViewHeightConstraint?.constant = height as! CGFloat
})
}
【解决方案2】:
您指的是使用 javascript 检测 webview 内容高度并手动设置高度的方法,应该适合您。
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("webview did enter did finish navigation")
webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
if complete != nil {
webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (result, error) in
if let heightOfContent = result as? CGFloat {
}
})
}
})
}
我也认为@binaryPilot 有一个很好的建议。
有一个名为sizeThatFits(CGSize) 的属性会尝试调整大小
内容到提供的大小。你可以提供那个原始框架
CGSize 在 didFinishNavigation 之后对该参数强制一个内容
模式。见:[这里][1]
[1]:https://developer.apple.com/documentation/uikit/uiview/1622619-contentmode