使用'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内容的高度,这在iOS8
, iOS9
和iOS11
工作正常,但在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并使用它。