ios - 根据动态本地内容确定 UIWebView 高度,在可变高度 TableViewCell 内

标签 ios cocoa-touch uitableview uiwebview

好的,所以我知道这个问题已经被问过了。有很多好的建议,但我无法让它按预期工作。我正在尝试创建一个 tableview 单元格,它可以根据不同的 html 动态设置其加载高度。大家建议的是使用下面的方法。

-(void)webViewDidFinishLoad:(UIWebView *)webView 

他们说要使用 javascript 计算高度,如下所示:

NSString *output = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"]; 

或者做这样的事情(我创造了这个):

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

这两种方法都返回正确的 webview 高度,但它们发生在 tableview 初始化之后。这个 webViewDidFinishLoad 在 heightForRowAtIndexPath 方法之后被调用。因此,在构建表格时,我没有单元格的高度。因此,每个人都说好,然后只需在您的 webViewDidFinishLoad 中重新加载 tableview,这再次起作用,但我不喜欢这样,因为存在滞后,当您到达该部分时,它会使 tableview 的滚动变得不稳定。我怎样才能解决这个问题?并使其平滑?我在考虑在加载 View 之前可能以某种方式确定 webview 高度,但不确定我将如何做到这一点。还尝试将 html 转换为纯文本字符串,但这会导致错误的高度,因为 html 有空格和内容,而纯文本没有。任何帮助将不胜感激!

最佳答案

我的建议与@Timothy Moose 非常相似,即在屏幕外渲染 webview。

我在这里采用的方法是...

-(void)viewDidLoad
{
     //Create a UIWebView and store it in a property
     //Hook the delegate to the view controller.
     //Load the html string to the UIWebView.

     //The rest of your initialization
}

在这种情况下,您的 heightForRowAtIndexPath: 仍可能会在 WebView 完成之前被调用。

您可以通过多种方式处理该问题。这是一个建议。

在 UIWebView 的 webViewDidFinishLoading 的委托(delegate)方法中,检查以确保进行调用的 webview 是存储在您的属性中的 webview。如果是这样,请调用以重新加载您的 webview 所在的部分(或行)。这应该调用 heightForRowAtIndexPath: 方法以再次调用,在这种情况下,您可以存储webViewDidFinishLoading 回调中的 webview。

如果 View 首次显示时单元格不在屏幕上,则在 cellForRowAtIndexPath: 中创建的单元格应该具有您在 中创建的 UIWebView查看DidLoad。通过将 UIWebView 添加到单元格的内容 View 来执行此操作。

如果 View 首次显示时单元格在屏幕上,我建议在单元格第一次加载时使用事件微调器,然后在 webview 加载完成后,使用 webview 重新加载单元格。

关于ios - 根据动态本地内容确定 UIWebView 高度,在可变高度 TableViewCell 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741871/

相关文章:

iphone - 如何开始为 iOS 开发配件?

iOS 收据验证 - 自动续订订阅

ios - constraintWithItem VS constraintsWithVisualFormat 的自动布局问题

iphone - iOS 上的 Core Text 和复制粘贴

iphone - 自定义 uitableviewcell 内的按钮不起作用

ios - 如何删除 UITableView NSAutoresizingMaskLayoutConstraint?

ios - Interface Builder中没有固定高度,约束困境

ios - 如何使用分发配置文件将 iPA 安装到特定设备

ios - 如何将 ViewController 数组转换为协议(protocol)类型数组

ios - UITableViewCell setHighlighted, setSelected "animateAlongsideTransition"或类似的