iPhone - 获取UIWebView的内容大小
我打开我的UIWebView中的本地Pdf文件,并尝试调整UIWebview的大小,使WebView高度变得等于WebView内容高度我正在使用这行代码来获取视图内容的高度iPhone - 获取UIWebView的内容大小
- (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任何一个可以帮助我PLZ如何让web视图的内容大小或使此代码为iOS 5的工作,以及
访问内容有点棘手,但在这里我将展示两种方式来做到这一点。
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;
}
}
的高度如果它返回0.0000,第二种情况是返回webView的高度而不是WebView的内容的高度; – 2012-04-24 14:32:56
你在尝试'webScrollView.contentSize'吗? – Lvsti 2012-04-24 14:43:53
是的webScrollView.contentSize。高度 – 2012-04-24 14:44:43
的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(web视图: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
}
}
更新:我发现如评论中所提到的,这似乎没有发现内容缩小的情况。不知道是否所有内容和操作系统版本都是如此,请尝试一下。
请提及您面临的错误或问题。 – iMash 2012-04-24 13:58:44
sizeThatFits不适用于iOS 5当我在iOS 4.3上运行上述代码时,它给了我UIWebView内容的确切高度,但是当我在iOS 5.0上运行此代码时,它提供了UIWebview的高度,而不是UIWebView内容 – 2012-04-24 14:01:16