2012-04-24 86 views
1

我打开我的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的工作,以及

+0

请提及您面临的错误或问题。 – iMash 2012-04-24 13:58:44

+0

sizeThatFits不适用于iOS 5当我在iOS 4.3上运行上述代码时,它给了我UIWebView内容的确切高度,但是当我在iOS 5.0上运行此代码时,它提供了UIWebview的高度,而不是UIWebView内容 – 2012-04-24 14:01:16

回答

6

访问内容有点棘手,但在这里我将展示两种方式来做到这一点。

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

的高度如果它返回0.0000,第二种情况是返回webView的高度而不是WebView的内容的高度; – 2012-04-24 14:32:56

+0

你在尝试'webScrollView.contentSize'吗? – Lvsti 2012-04-24 14:43:53

+0

是的webScrollView.contentSize。高度 – 2012-04-24 14:44:43

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(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 
} 

}

更新:我发现如评论中所提到的,这似乎没有发现内容缩小的情况。不知道是否所有内容和操作系统版本都是如此,请尝试一下。