【问题标题】:iOS UIWebView is not updating it's size after loading is finished加载完成后,iOS UIWebView 未更新其大小
【发布时间】:2016-04-08 07:26:50
【问题描述】:

我在 1 个viewController 中有三个webViews。它们都使用内联样式表显示本地html(没有从任何外部资源加载)。我想根据内容大小在运行时缩放webViews 高度。问题是只有第一个 webView 可以正确缩放。仅当我更改 view controller(例如转到应用程序的另一部分)并返回时,剩下的 2 个才会刷新它们的大小。

这里是viewDidFinishedLoad的代码

func webViewDidFinishLoad(webView: UIWebView) {
  if webView.stringByEvaluatingJavaScriptFromString("document.readyState") == "complete" {
    var height = webView.scrollView.contentSize.height
    debugPrint(height)

    if webView == freeWebview{
        freePriceHeight.constant = height
    }
   if webView == basicPriceWebView{
        bacicWebViewHeight.constant = height
    }
    if webView == premiumTagWebView{
        premiumWebViewHeight.constant = height

    }
    debugPrint(webView.stringByEvaluatingJavaScriptFromString("document.body.innerHTML;"))
    webView.setNeedsUpdateConstraints()
    webView.layoutIfNeeded()
    }
}

所有 Web 视图都连接到同一个 Web 视图代理。 DebugPrints 显示它们都加载了全部内容,但只更新了一个高度

【问题讨论】:

  • 你确定高度是主要原因吗,可能它们是重叠的。因为我们不知道视图在层次结构中是如何排列的。
  • 视图层次排列为rootView -> scroll view -> contentView -> [webView, webView, webView]。 WebViews 是按约束排列的,第一个 webView 连接到 contentView 的顶部,next 的顶部连接到前一个底部。目前 ContentView 的大小是固定的,并且比所有具有完整内容的 webView 都大得多。返回 viewController 后,其他元素有很多空白空间

标签: ios swift webview uiwebview


【解决方案1】:

我找到了解决方案。我必须在前一个完全加载后才加载 web 视图,所以现在我的代码看起来

func webViewDidFinishLoad(webView: UIWebView) { 
    if webView.stringByEvaluatingJavaScriptFromString("document.readyState") == "complete"{
        var height = webView.scrollView.contentSize.height
        if webView == freeWebview{
            freePriceHeight.constant = height
            self.prepareSecondWebView()
        }
        if webView == basicPriceWebView{
            basicWebViewHeight.constant = height
            self.prepareThirdWebView()
        }
        if webView == premiumTagWebView{
            premiumWebViewHeight.constant = height
        }
   }
}

【讨论】:

  • 谢谢,这对我帮助很大。这里的关键是 webView 异步加载,因此您需要确保所有元素都完成加载到其中。将控制器设置为 webview 的委托,在 swift 3 中,函数是这样的,func webViewDidFinishLoad(_ webView: UIWebView) {}
【解决方案2】:

webViewDidFinishLoad 代替

webView.setNeedsUpdateConstraints()
webView.layoutIfNeeded()

试试

webView.scalesPageToFit = true

【讨论】:

  • 不起作用。 WebViews 约束没有改变,只是内容被缩放以适应设备宽度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2010-12-12
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多