【问题标题】:UIWebView resize to fit ContentUIWebView 调整大小以适应内容
【发布时间】:2011-08-20 08:16:55
【问题描述】:

这就是我想要做的,

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

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

y 坐标是根据动态添加的其他视图的高度计算的,效果很好。

screenWidth 根据设备方向设置为 320 或 480,这也可以正常工作。

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

内容可以是我加载的纯文本

        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 都是滚动锁定的。所以我必须始终根据设备方向保持我的 webView 宽度与 self.view.frame.size.width 相同,并且 webView 宽度应该改变以适应内容。我相应地将scrollView contentSize 设置为允许垂直滚动。

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

如何处理这种情况?

【问题讨论】:

    标签: iphone ios4 uiwebview


    【解决方案1】:

    从横向切换到纵向时,我还遇到了 UIWebView 内容大小不正确的问题。

    找了一阵子,终于找到了答案:

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

    【讨论】:

    • 优秀的答案。解决了我的问题!谢谢! :)
    【解决方案2】:

    根据文档,尺寸适合:

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

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

    【讨论】:

    • myWebView 可能试图显示大于屏幕宽度的内容。现在的问题是,即使我在 webView 中加载的 html/CSS 明确声明宽度大于 webView 宽度,是否有办法在屏幕宽度周围进行 textWrap?
    • 我对此表示怀疑 - 封闭视图不会知道 webView 内部发生了什么。
    • 没有封闭视图。我希望 webView 的内容环绕 webView 的宽度。我在哪里说 UIWebView 的封闭视图?
    • 没有封闭视图。我希望 webView 的内容环绕 webView 的宽度。我在哪里说 UIWebView 的封闭视图?
    • (请尽量保持礼貌)。你暗示了它 - 如果 html/CSS 声明比屏幕宽度更宽,并且你想覆盖它,除了 webview 之外的东西还剩下什么?如果您想在 html 中执行此操作,我确信有办法做到这一点,但我不是 html/css 方面的专家。