使用'document.body.scrollHeight'计算UIWebView内容dynamic高度 在iOS 10中返回更大的值

我正在使用Objective C创build一个应用程序,我正在使用UIWebView以HTML格式显示内容。 我在UIWebView委托方法webViewDidFinishLoad使用下面的代码

NSUInteger contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@“document.body.scrollHeight;”]] intValue];

计算webview内容的高度,这在iOS8iOS9iOS11工作正常,但在iOS10 iPhone手机的内容高度返回比实际的内容价值更大的价值。 正因为如此,我在屏幕底部显示了一些额外的空白。

我尝试了所有的解决scheme,但只有在iOS 10中获得相同的错误的内容高度。请帮我解决这个问题。 先谢谢你!

可悲的是,我也找不到这个问题。 但是,我想我知道罪魁祸首:html <tables>和自动resize。 在苹果的Safari浏览器更新日志中,关于视口和渲染更改有一些讨论,但没有足够的具体内容。

它会出现webviews(Safari浏览器动力)不同版本之间呈现HTML不同; 有道理,虽然我不能提供很多韵或理由和明确的CSS <table><body>什么都没有产生。

希望这个部分的答案有助于取得一些进展,或至less有一个解决方法。

我努力了很多,正确调整WebView的大小。

尝试在评估document.body.scrollHeight之前再添加一个步骤。

像这样的东西:

 -(void) webViewDidFinishLoad:(UIWebView *)webView { if[[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]){ webViewHeight = [[WebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; //resize logic } 

我在swift和WKWebView中编写我的代码,但基本上是一样的。 关键是要抓住scrollHeight(或者offsetHeight – 在这种情况下找不出差别),看起来那个时刻只是在document.readyState之后。

希望这会帮助你。

我曾经使用以下方式获取contentSize。

我已经在webview的滚动视图中添加了观察者(KVO)。

 self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil); 

现在,每当webview的内容将改变,我在这个方法得到callback

 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { } 

现在从这个方法取对象的contentSize并使用它。