我在UIWebView中打开本地Pdf文件,而不是尝试调整UIWebview的大小,使WebView高度等于WebView内容高度我使用这行代码来获取WebView内容的高度
- (float) getWebViewContentHeight:(UIWebView *)view
{
CGRect aFrame = view.frame;
aFrame.size.height = [view sizeThatFits:[[UIScreen mainScreen] bounds].size].height;
view.frame = aFrame;
return view.frame.size.height;
}
此代码在iOS 4.3上完美运行但在iOS 5.0上无法正常工作可以帮助我了解如何获取webView的内容大小或使此代码适用于iOS 5
答案 0 :(得分:6)
访问内容有点棘手,但在这里我将展示2种方法。
<强> 1。丑陋的方式
使用JS查询文档属性:
CGSize contentSize = CGSizeMake([[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"] floatValue],
[[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] floatValue]);
<强> 2。不那么丑陋的方式
UIWebView
是一个包含内部UIScrollView
的复合对象。从iOS 5.0开始,您可以尝试抓取此滚动视图并将其contentSize
属性直接用作webView.scrollView.contentSize
。如果你需要保持与iOS 4.3及之前的兼容性,你必须做一些黑魔术来获得滚动视图:
UIScrollView* webScrollView = nil;
for ( UIView* subview in [webView subviews] )
{
if ( [subview isKindOfClass:[UIScrollView class]] )
{
webScrollView = (UIScrollView*)subview;
break;
}
}
答案 1 :(得分:0)
webViewDidFinishLoad方法可能会被多次调用,而sizeThatFits返回的第一个值只是最终大小应该是的一部分。然后无论出于何种原因,当webViewDidFinishLoad再次触发时,下一次调用sizeThatFits将错误地返回之前执行的相同值!对于相同的内容,这将是随机发生的,就好像它是某种并发问题一样。也许这种行为随着时间的推移而发生了变化,因为我正在为iOS 5构建并且还发现sizeToFit的工作方式大致相同(虽然之前没有这样做?)
我已经确定了这个简单的解决方案:
- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
CGFloat height = [[aWebView stringByEvaluatingJavaScriptFromString:@"document.height"] floatValue];
CGFloat width = [[aWebView stringByEvaluatingJavaScriptFromString:@"document.width"] floatValue];
CGRect frame = aWebView.frame;
frame.size.height = height;
frame.size.width = width;
aWebView.frame = frame;
}
斯威夫特(2.2):
func webViewDidFinishLoad(webView:UIWebView){
if let heightString = webView.stringByEvaluatingJavaScriptFromString("document.height"),
widthString = webView.stringByEvaluatingJavaScriptFromString("document.width"),
height = Float(heightString),
width = Float(widthString) {
var rect = webView.frame
rect.size.height = CGFloat(height)
rect.size.width = CGFloat(width)
webView.frame = rect
}
}
更新:我发现在评论中提到这似乎没有抓住内容缩水的情况。不确定所有内容和操作系统版本是否属实,请试一试。