【问题标题】:WKWebView not resizing when content changing内容更改时 WKWebView 不调整大小
【发布时间】:2016-06-07 07:47:01
【问题描述】:

内容更改时,WKWebView 不会调整大小。

这是一个代码sn-p:

@IBOutlet weak var containingView: UIView!
var webView: WKWebView! 

override func viewDidLoad()
{
    super.viewDidLoad()

    let contentController = WKUserContentController();
    self.webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: WKWebViewConfiguration())
    self.webView.autoresizingMask = [.FlexibleHeight]
    self.webView.loadHTMLString(__, baseURL: __))
    self.webView.scrollView.bounces = false
    self.webView.scrollView.scrollEnabled = false

    self.containingView.addSubview(self.webView)
}

应该添加什么函数,以便我可以拦截正在更改的内容大小并相应地更改包含视图的大小?

【问题讨论】:

  • webview 会自动滚动,为什么你需要它的高度来改变内容?
  • 我不希望它可以滚动。我希望包含视图根据 Web 内容重新缩放
  • 您需要使用 javascript 来检测 webview 内容高度并手动设置高度

标签: ios iphone swift wkwebview


【解决方案1】:
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 {

                }
            })
        }
    })
}

【讨论】:

    【解决方案2】:

    阻碍我的是 WKWebView 的初始高度很小

    webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, 150), configuration: configuration)
    

    而不是

    webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: configuration)
    

    【讨论】:

      【解决方案3】:

      从概念上讲,在目标 c 中,您应该执行以下操作。

      两件事: 确保具有以下属性:

      self.webView.scalesPageToFit = YES;
      self.webView.contentMode = UIViewContentModeScaleAspectFit;
      

      最后计算 webView 内容高度为:- webView.isLoading 是最重要的属性之一。实际上,在一次调用 Web url 时,它会被多次调用。

      - (void)webViewDidFinishLoad:(UIWebView *)webView{
      if (webView.isLoading == NO)// as it is called multiple times so wait untill last call
      {
       CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
      }
      
      }
      

      这就是你应该如何计算网络视图高度。

      你可以看看这里,因为 WKWebView 没有删除,你可以使用它来获取内容大小,而不是使用 KVO:

      KVO example 或许对你有更多帮助!

      【讨论】:

      • 我正在使用 WKWebView。它没有 scalesPageToFit 属性
      • 但是说我将我的实现更改为 UIWebView,仍然有一些情况下 webViewDidFinishLoad 没有被调用,即使屏幕上的内容发生了变化
      • webViewDidFinishLoad ??你确定你设置了委托
      • 这是 WKWebView,不是 UIWebView
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2013-10-24
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多