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

时间:2014-02-28 08:10:39

标签: ios iphone objective-c uiwebview mathjax

我正在将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
}

如何在延迟后不使用webView的情况下获得performSelector的正确内容大小?

我甚至尝试了this post并尝试在shouldStartLoadWithRequestwebViewDidFinishLoad中捕获该事件,但即使这样也毫无用处。

2 个答案:

答案 0 :(得分:7)

试试这个

 float height = [[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.scrollHeight;"] floatValue];

答案 1 :(得分:1)

问题在于,当调用webViewDidFinishLoad时,意味着UIWebView已加载HTML内容。但它仍然要渲染HTML来定义HTML的实际高度。这就是您在短暂延迟后获得正确尺寸的原因。

获取内容正确高度的最佳方法是在完全呈现HTML后,向内容大小添加一些Javascript,以便将内容大小发送到UIWebView。

您可以在此blogpost找到有关如何执行此操作的简短教程。