2017-09-01 450 views
7

我正在使用Objective C创建应用程序,其中我使用UIWebView以HTML格式显示内容。我在UIWebView委托方法使用以下代码webViewDidFinishLoad使用'document.body.scrollHeight'计算UIWebView内容动态高度在iOS 10中返回更大的值

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

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

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

回答

0

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

它会出现webviews(safari powered)版本之间呈现HTML不同;有道理,虽然我不能提供很多押韵或原因,并且<table><body>的显式CSS没有任何效果。

希望这个部分答案有助于取得一些进展或至少解决问题。

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 
} 

我写我的代码中迅速和WKWebView,但它基本上是一样的。 重点是在恰当的时刻捕捉scrollHeight(或offsetHeight - 无法找出这种情况下的差异),并且似乎那一刻只是在document.readyState之后。

希望这会帮助你。

+0

感谢您的回复,我已经测试了上面的代码但不工作。 –

0

我曾使用以下方式获取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此方法并使用它。