UIWebView的webViewDidFinishLoad未返回嵌入scrollView的正确内容大小

3
我正在将MathML内容加载到UIWebView中,有时数学表达式可能会跨越我的webview框架,用户必须滚动才能查看超出边界的内容。为了处理这种情况,当存在可滚动的内容时,我为用户显示一个可视箭头指示器。
我的问题是,在我的webViewDidFinishLoad方法中,如果我尝试访问webviewscrollView.contentSize,它不会返回我准确的内容大小,但是如果我在一些延迟之后的其他方法中检查它,就会获得正确的内容大小。但是使用计时器来检查这个是我认为不太有效的方法。
以下是我的代码片段:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"contentSize %@",NSStringFromCGSize(webView.scrollView.contentSize));// returning worng values, even if content size is more this is returning default frame values of webview
    [self performSelector:@selector(checkContentSize) withObject:self afterDelay:1.5];//working properly after delay
}

如何在不使用performSelector延迟调用的情况下获取适当的webView内容大小?

我甚至尝试了这篇文章,并尝试在shouldStartLoadWithRequestwebViewDidFinishLoad中捕获该事件,但是这些方法都无法解决问题。

2个回答

7
尝试这个。
 float height = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue];

1
问题在于当调用webViewDidFinishLoad时,它意味着UIWebView已经加载了HTML内容。但是它仍然需要渲染HTML来定义HTML的实际高度。这就是为什么您需要等待短暂延迟后才能得到正确的尺寸。
获取内容正确高度的最佳方法是向内容添加一些Javascript,一旦HTML完全呈现,就将内容大小发送到UIWebView中。
您可以在这个blogpost中找到如何执行此操作的简短教程。

@joem 实际上,在我的webview中启用了scalesPageToFit属性,我收到的实际内容太大了,而web内容的scalesPageToFit正在调整它,并根据iPhone窗口边界调整内容。如果我像你在帖子中说的那样访问,我会得到比webview当前呈现的更宽和更高的实际文档内容。 - Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接