UIWebView调整大小以适应内容

时间:2011-05-06 16:44:42

标签: iphone ios4 uiwebview

这是我想要做的,

我有一个webView,其框架我设置为

self.webView.frame = CGRectMake(0, Y,screenWidth,1);

y坐标是根据动态添加的其他视图的高度计算得出的。

screenWidth设置为320或480,具体取决于设备方向,也可以正常工作。

现在我希望我的webView将其宽度设置为screenWidth并仅调整其高度以适应内容。

内容可以是plainText,我加载为

        NSData* data=[msgBody dataUsingEncoding:NSUTF8StringEncoding];             
        if (data) 
        [self.webView loadData:data MIMEType:@"text/plain" textEncodingName:@"UTF-8" baseURL:nil];  

或我加载为

的HTML
        [self.webView loadHTMLString:htmlMsgBody baseURL:nil]; 

在我的WebViewDidFinishLoad方法中,我这样做,

- (void)webViewDidFinishLoad:(UIWebView *)webview {

    CGRect frame = self.webView.frame;
    CGSize fittingSize = [self.webView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    self.webView.frame = frame;

   CGFloat totalHeight = self.webView.frame.origin.y+self.webView.frame.origin.height+30;

    //the webView is scrolllocked and put on a scrollView so I do this

    [self.theScrollView setContentSize:CGSizeMake(screenWidth, totalHeight)];
}

我放置webView的scrollView可以水平滚动。无论如何,我的webView都是scrollLocked。所以我必须始终保持我的webView宽度与self.view.frame.size.width相同,这取决于设备方向,并且webView宽度应该更改以适合内容。因此我设置scrollView contentSize以允许垂直滚动。

但问题是,self.webView sizeThatFits方法返回奇怪的值,当我的screenWidth为320时,我得到fittingSize.width为408,而我的内容水平离开屏幕,我无法显示内容正确。即使我强行设置self.webView.frame.size.width = screenWidth的框架,部分内容仍然在屏幕外。

如何应对这种情况?

2 个答案:

答案 0 :(得分:3)

根据文档,大小适合:

  

调整并移动接收器视图,使其仅包含 子视图

这不会向您提供有关将webView纳入其包含视图的任何信息。 您的webView是否可能尝试显示比screenWidth更宽的内容,并且由于您将其滚动锁定,它是否显示整个宽度?

答案 1 :(得分:1)

我还遇到了从横向切换到纵向时UIWebView内容无法正确调整大小的问题。

在狩猎了一段时间后,我找到了答案:

“我发现处理这个的一种方法是在调整大小后重新加载内容。当我说”重新加载“时,我不是指UIWebView上的内置重载功能,我的意思是对loadHTMLString的实际调用:baseURL :(或者您最初用于加载内容的方法)。“ Agent Gold's post on Apple Support forum