使用'document.body.scrollHeight'计算UIWebView内容动态高度在iOS 10中返回更大的值
我正在使用Objective C创建应用程序,其中我使用UIWebView
以HTML格式显示内容。我在UIWebView
委托方法使用以下代码webViewDidFinishLoad
使用'document.body.scrollHeight'计算UIWebView内容动态高度在iOS 10中返回更大的值
NSUInteger或contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString:[的NSString stringWithFormat:@ “document.body.scrollHeight;”]]的intValue];
计算视图内容的高度,这是在iOS8
,iOS9
和iOS11
工作正常,但在iOS10
iPhone手机的内容高度返回比实际含量值一个更大的价值。正因为如此,我在屏幕的webview底部获得了一些额外的空白空间。
我试过所有的解决方案,但只有在iOS 10中获得相同的错误内容高度。请帮我解决这个问题。先谢谢你!
不幸的是,我也找不到这个问题。但是,我想我知道罪魁祸首:html <tables>
并自动调整大小。在苹果的Safari浏览器更新日志中,关于视口和渲染更改有一些讨论,但没有足够的具体内容。
它会出现webviews(safari powered)版本之间呈现HTML不同;有道理,虽然我不能提供很多押韵或原因,并且<table>
和<body>
的显式CSS没有任何效果。
希望这个部分答案有助于取得一些进展或至少解决问题。
我已经挣扎了很多,以正确调整WebView的大小。
尝试在评估document.body.scrollHeight之前再添加一个步骤。
事情是这样的:
-(void) webViewDidFinishLoad:(UIWebView *)webView {
if[[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]){
webViewHeight = [[WebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
//resize logic
}
我写我的代码中迅速和WKWebView,但它基本上是一样的。 重点是在恰当的时刻捕捉scrollHeight(或offsetHeight - 无法找出这种情况下的差异),并且似乎那一刻只是在document.readyState之后。
希望这会帮助你。
我曾使用以下方式获取contentSize。
我在webview的滚动视图中添加了观察者(KVO)。
self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil);
现在,每当网页流量的contentsize将得到改变,我得到的回调在该方法
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
}
现在采取对象的contentSize此方法并使用它。
感谢您的回复,我已经测试了上面的代码但不工作。 –