我使用的是 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
是一个包含特定菜单对象信息的类,例如类型。结果是单元格显示在正确的高度,但它是空的。
最佳答案
不再建议使用 heightForRowAtIndexPath
- 那太老套了。相反,这样做:
- 在您的单元格中设置自动布局约束(如果您不知道如何操作 - 您需要,这不再是您可以避免的事情!)
- 在
tableView
上创建一个estimatedRowHeight
供自动布局使用。您可以在 nib/storyboard 中或以编程方式在viewDidLoad
中设置它,例如,像这样:
self.tableview.estimatedRowHeight = 68.0;
将您的
tableview
设置为使用“自动尺寸”,如下所示:self.tableview.rowHeight = UITableViewAutomaticDimension;
就是这样。如果你做了这些事情,那么你的单元格将根据它们的约束改变高度。因此,如果您的一个子类由于其限制而具有 150px 的高度,那么它将在另一个高度为 50px 的子类旁边完美地工作。您还可以根据单元格的内容动态地改变单元格的高度,例如,当您有使用“大于或等于”约束扩展的标签时。此外 - 只需省略“heightForRowAtIndexPath
”方法,您根本不需要实现它。
关于ios - 如果实现了 heightForRowAtIndexPath,单元格内容不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290089/