UIWebView 在 webview 完成加载时高度不正确

Posted

技术标签:

【中文标题】UIWebView 在 webview 完成加载时高度不正确【英文标题】:UIWebView not correct height on webview finish loading 【发布时间】:2013-12-30 21:47:17 【问题描述】:

我有集合视图,我在单元格中放置 UITableView。 该表视图中的两个单元格包含 UIWebView。 我需要动态计算 UIWebViews 的高度。所以我接下来做

 - (void)webViewDidFinishLoad:(UIWebView *)webView

..... CGFloat webViewHeight = [[webView stringByEvaluatingjavascriptFromString:@"document.body.scrollHeight;"]floatValue];

但问题是,当此单元格用于数组中的另一个对象时,结果的高度是使用先前上传的内容计算的。我已经尝试使用下一个东西来解决这个问题 [webView stringByEvaluatingJavaScriptFromString:@"document.body = \"\";"]; 但这对我没有帮助。它在模拟器上运行良好,但在设备上却有问题。 + 如果我在上传新的 html 之前延迟了

[webView loadHTMLString:sourceHTML baseURL:nil];

我可以看到导致计算错误高度的先前内容。

更新 1 这是最适合我的解决方案

CGRect frame = webView.frame;
    frame.size.height = 1;
    webView.frame = frame;
    frame = webView.frame;
    frame.size = [webView sizeThatFits:CGSizeZero];
    webView.frame = frame;

从框架中我可以得到正确的高度。

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

您可以通过在 webViewDidFinishLoad 函数中调用这两个函数来重新加载单元格的高度而不重新加载数据来解决这个问题:

- (void)webViewDidFinishLoad:(UIWebView *)webView

    [tableView beginUpdates];
    [tableView endUpdates];

如果您需要在初始数据加载之前知道高度,那么您唯一的选择是在初始化表格之前加载UIWebView。然后将预加载的UIWebView 分配给cellForRowAtIndexPath 中单元格的webView 属性。

source

【讨论】:

以上是关于UIWebView 在 webview 完成加载时高度不正确的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 完成太快

UIWebView 新增 Url 加载动画效果

如何判断 UIWebView 何时完成渲染(未加载)?

UIWebView加载页面

UITableViewCell嵌套UIWebView并且cell根据webView的内容自适应

在新线程中加载 UIWebView 内容