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

问题描述:

我正在将mathml内容加载到UIWebView,有时数学表达式可能会跨越我的webview框架,用户必须滚动才能查看超出边界的内容。为了处理这种情况,我为用户显示一个可视箭头指示符,只要它们是可滚动的内容。 我的问题是,在我的webViewDidFinishLoad如果我尝试访问webview, scrollView.contentSize它没有返回我确切的内容大小,但如果我在某些其他方法后检查此延迟它正在得到正确的内容大小。但用计时器检查我不认为有效的方法来做到这一点。 下面是我的代码片段,UIWebView webViewDidFinishLoad没有返回嵌入的scrollView的正确内容大小

- (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中捕获该事件,但即使这样也没用。

试试这个

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

的问题是,当webViewDidFinishLoad被称为这意味着UIWebView中加载HTML内容。但它仍然需要渲染HTML来定义HTML的实际高度。这就是为什么你在短暂的延迟后得到正确的尺寸。

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

你可以在blogpost找到一个关于如何做到这一点的简短教程。

+0

@joem其实scalePageToFit属性已启用在我的web视图和我得到的实际内容是太大的网页内容scalesPageToFit正在调整它的大小,并根据iPhone窗口界限调整内容,如果我像你如何访问在你的文章中说我得到的实际文档内容的宽度和高度,这比webview目前在scalesPageToFit之后呈现的内容还要多。 – Smith

+0

非常感谢!这对我有用! –