如果实现了heightForRowAtIndexPath,则不会显示单元格内容

时间:2016-02-09 10:50:24

标签: ios objective-c uitableview

我正在使用iOS 9.2和XCode 7.2。

我有一个基本的UITableView对象,我在其中添加了不同类型的UITableViewCell子类。

使用其中一个,当我手动设置覆盖方法heightForRowAtIndexPath的高度时,我不会在单元格上获得任何内容。

如果我返回-1作为高度(UITable行高的默认值),我的单元格会正确显示。问题是我确实需要一个不同的高度,因为内容非常大。

这是heightForRowAtIndexPath的代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MenuItem *menuItem = [menuManager menuItemAtIndex:indexPath.row];
    if ([menuItem type] == MenuItemTypeEditorHeader) {
        return 100;
    } else {
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
    }
}

MenuItem是一个包含特定菜单对象'信息的类,例如类型。结果是细胞出现在正确的高度,但它是空的。

3 个答案:

答案 0 :(得分:2)

不建议再使用heightForRowAtIndexPath - 那就是老派。相反,这样做:

  1. 在您的单元格中设置自动布局约束(如果您不知道如何 - 您需要,它不是您可以避免的东西!)
  2. estimatedRowHeight上为自动布局创建tableView。您可以在nib / storyboard中或以编程方式在viewDidLoad中设置它,例如,像这样:
  3. self.tableview.estimatedRowHeight = 68.0;

    1. tableview设置为使用'自动尺寸',如下所示:

      self.tableview.rowHeight = UITableViewAutomaticDimension;

    2. 就是这样。如果你做这些事情,那么你的细胞的高度会根据它们的限制而变化。因此,如果您的一个子类由于其约束而具有150px的高度,那么它将在另一个高度为50px的子类旁边完美地工作。您还可以根据单元格的内容动态更改单元格的高度,例如,当您使用大于或等于'大于或等于'限制。另外 - 只需省略' heightForRowAtIndexPath'方法,你根本不需要实现它。

答案 1 :(得分:0)

HeightForRowAtIndexPath只返回一行的高度。因此cellForRowAtIndexPath可能存在问题。

答案 2 :(得分:0)

您是否在呼叫tableView.reloadData()

在调用tableView.reloadData()之前打印菜单对象的长度。