我在使用Objective C的应用程序上创建,我使用UIWebView
来显示HTML格式的内容。我在UIWebView
委托方法webViewDidFinishLoad
NSUInteger contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@“document.body.scrollHeight;”]] intValue];
要计算网页浏览量内容的高度,这在iOS8
,iOS9
和iOS11
中运行正常,但在iOS10
iPhone手机中,内容高度的返回值远大于实际内容价值。因此,我在屏幕上的webview底部获得了一些额外的空白区域。
我尝试了所有解决方案,但仅在iOS 10中获得相同的错误内容高度。请帮我解决此问题。提前谢谢!
答案 0 :(得分:1)
我曾使用以下方式获取contentSize。
我在webview的scrollview上添加了观察者(KVO)。
self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil);
现在,每当webview的内容化发生变化时,我都会在此方法中获得回调
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
}
现在从这个方法中获取对象的contentSize并使用它。
答案 1 :(得分:0)
可悲的是,我也无法追查这个问题。但是,我想我知道罪魁祸首:html <tables>
并自动调整大小。在apple的safari changelog中,关于视口和渲染更改有一些讨论,但没有什么特别的。
它会出现webviews(safari powered)在版本之间呈现不同的HTML;是有道理的,虽然我不能为<table>
和<body>
提供任何内容的韵律或理由和明确的css。
希望这个部分答案有助于取得一些进展或至少可以解决。
答案 2 :(得分:0)
我正在努力正确调整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之后。
希望这会对你有所帮助。