我有一个UITableViewCell
,其中包含UIWebView
作为子视图。 Web视图填充整个单元格。我正在使用estimatedRowHeight
来计算行高。但是,在构建表格视图时,单元格没有高度,因为Web视图没有加载它的内容,因此单元格没有内容。因此,estimatedRowHeight
返回44而不是Web视图内容的正确高度。
当没有立即设置内容时,是否有人知道如何正确计算行的高度?有没有办法估计某些单元格的高度,并在同一个表视图中明确设置其他单元格的高度?
这就是我使用estimatedRowHeight
的方式:
self.tableView.estimatedRowHeight = 200;
self.tableView.rowHeight = UITableViewAutomaticDimension;
我没有使用委托方法。我试过了,但它没有改变结果。我正在使用的单元格有一个xib,它也使用自动布局约束。为清楚起见,单元格确实出现,并且Web视图确实已添加到单元格中。问题是单元格的高度不足以显示整个Web视图。 Web视图为音频播放器加载HTML嵌入代码。
答案 0 :(得分:12)
我做了一些摆弄,发现你可以通过以下方式使用UITableViewAutomaticDimension
:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
TableSection *tableSection = (self.tableModel.sections)[indexPath.section];
if (tableSection.sectionType == TableSectionTypeWebView)
{
return 120;
}
else
{
return UITableViewAutomaticDimension;
}
}
这基本上说,对于任何WebView部分使用120的高度,但对于其他一切,我希望你找出高度。我在这里使用我自己的自定义表模型(即TableSection,sectionType等等)
我必须在self.tableView.estimatedRowHeight = 200;
方法中添加init
才能使其正常工作。
现在我可以提供估计的行高,但也可以为某些部分显式设置行高,如果需要,甚至可以设置一些行。
我还没有看到任何相关的文档,但是我用可变长度字符串对它进行了测试,结果很好。
答案 1 :(得分:0)
您将您的类设为UIWebViewDelegate,然后将您的类设置为UITableViewCell中每个UIWebView的委托
-(void)webViewDidFinishLoad:(UIWebView *)aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
//Asks the view to calculate and return the size that best fits //its subviews.
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
现在您可以获取UIWebView的高度并将其设置为行高,因为一旦调用'beginUpdates',将再次调用以下方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath*)indexPath {
return _webView.frame.size.height;
}
希望这有助于