【发布时间】:2017-11-03 03:20:37
【问题描述】:
我已经阅读了很多关于如何获取 webView 高度的文章。他们中的大多数使用 KVO 来观察 contentSize。我也这样做了。
1)创建wkWebView,禁止webView的scrollView
lazy var webView: WKWebView = WKWebView()
webView.scrollView.bounces = false
webView.scrollView.isScrollEnabled = false
webView.snp.makeConstraints({ (make) in
make.left.right.equalTo(view)
make.top.equalTo(headerView.snp.bottom)
make.height.equalTo(AppDefaults.screenH - 64 - 44)
make.bottom.equalTo(containView)
})
2) 添加观察者
webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "contentSize" {
if let scroll = object as? UIScrollView {
if scroll.contentSize.height > 0 {
updateWebViewConstraints(scroll.contentSize.height)
}
}
}
}
func updateWebViewConstraints(_ height: CGFloat) {
webView.snp.remakeConstraints { make in
make.left.right.equalTo(view)
make.top.equalTo(headerView.snp.bottom)
make.height.equalTo(height)
make.bottom.equalTo(containView).offset(-44)
}
}
3) 移除观察者
deinit {
webView.scrollView.removeObserver(self, forKeyPath: "contentSize")
}
当我运行应用程序时,有时我可以获得正确显示的 webView 的正确高度。如下图所示
但有时,webView 的高度超过了正确的高度,这会导致 webView 有一部分空白空间。我们可以看到下面的图片,它得到了错误的 contentSize,
当我点击 nextButton 加载新内容时,它也保持之前的高度。这不好。就像 contentSize 的高度超过新内容的高度一样。它不会改变。
为了对比wkWebView,所以我尝试了UIWebView,是正确的。所以,我不知道如何解决这个问题。请给我一些建议。谢谢
【问题讨论】:
标签: ios swift webview uiscrollview contentsize