当 WKWebView 框架调整大小时,内容大小损坏
Posted
技术标签:
【中文标题】当 WKWebView 框架调整大小时,内容大小损坏【英文标题】:When the WKWebView frame is resized, the content size broken 【发布时间】:2021-03-21 16:46:59 【问题描述】:在做 didFinishNavigation 之后,我尝试调整 WKWebView 框架的大小,导致加载的内容大幅调整大小。如何避免这种情况?
例如,加载页面后,我想从 WKWebView 中获取信息,使用评估 javascript 来调整内容的大小并将 WKWebView 设置为适当的大小。
【问题讨论】:
你看过设置 WKWebView.contentMode 了吗?有一个名为 sizeThatFits(CGSize) 的属性会尝试将内容调整为提供的大小。您可以在 didFinishNavigation 之后将原始帧 CGSize 提供给该参数以强制使用内容模式。见:developer.apple.com/documentation/uikit/uiview/… 【参考方案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
【讨论】:
以上是关于当 WKWebView 框架调整大小时,内容大小损坏的主要内容,如果未能解决你的问题,请参考以下文章
调整 UIWebView 框架大小时如何禁用 UIWebView 调整内容大小