显式设置某些行的行高,但对其他行使用estimatedRowHeight

时间:2014-11-11 16:25:27

标签: uitableview uiwebview ios8 row-height

我有一个UITableViewCell,其中包含UIWebView作为子视图。 Web视图填充整个单元格。我正在使用estimatedRowHeight来计算行高。但是,在构建表格视图时,单元格没有高度,因为Web视图没有加载它的内容,因此单元格没有内容。因此,estimatedRowHeight返回44而不是Web视图内容的正确高度。

当没有立即设置内容时,是否有人知道如何正确计算行的高度?有没有办法估计某些单元格的高度,并在同一个表视图中明确设置其他单元格的高度?

这就是我使用estimatedRowHeight的方式:

self.tableView.estimatedRowHeight = 200;
self.tableView.rowHeight = UITableViewAutomaticDimension;

我没有使用委托方法。我试过了,但它没有改变结果。我正在使用的单元格有一个xib,它也使用自动布局约束。为清楚起见,单元格确实出现,并且Web视图确实已添加到单元格中。问题是单元格的高度不足以显示整个Web视图。 Web视图为音频播放器加载HTML嵌入代码。

2 个答案:

答案 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;
}

希望这有助于