【问题标题】:When the WKWebView frame is resized, the content size broken当 WKWebView 框架调整大小时,内容大小损坏
【发布时间】:2021-03-21 16:46:59
【问题描述】:

在做 didFinishNavigation 之后,我尝试调整 WKWebView 框架的大小,导致加载的内容大幅调整大小。如何避免这种情况?

例如,加载页面后,我想从 WKWebView 中获取信息,使用评估 JavaScript 来调整内容的大小并将 WKWebView 设置为适当的大小。

【问题讨论】:

  • 你看过设置 WKWebView.contentMode 了吗?有一个名为 sizeThatFits(CGSize) 的属性会尝试将内容调整为提供的大小。您可以在 didFinishNavigation 之后将原始帧 CGSize 提供给该参数以强制使用内容模式。见:developer.apple.com/documentation/uikit/uiview/…

标签: 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多