加载完成后,iOS UIWebView不会更新它的大小

时间:2016-04-08 07:26:51

标签: ios swift webview uiwebview

我在webViews中有三个viewController。所有这些都显示带有内联样式表的本地html(没有任何内容从任何外部资源加载)。我想根据内容大小在运行时缩放webViews高度。问题是只有第一个webView才能正确扩展。只有当我更改view controller(f.e。转到应用程序的另一部分)并返回时,剩下的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显示所有这些内容都加载了它们的全部内容,但只更新了一个高度

2 个答案:

答案 0 :(得分:4)

我找到了解决方案。我必须在上一次完全加载之后加载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
        }
   }
}

答案 1 :(得分:0)

webViewDidFinishLoad而不是

webView.setNeedsUpdateConstraints()
webView.layoutIfNeeded()

webView.scalesPageToFit = true