我正在使用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
是一个包含特定菜单对象'信息的类,例如类型。结果是细胞出现在正确的高度,但它是空的。
答案 0 :(得分:2)
不建议再使用heightForRowAtIndexPath
- 那就是老派。相反,这样做:
estimatedRowHeight
上为自动布局创建tableView
。您可以在nib / storyboard中或以编程方式在viewDidLoad
中设置它,例如,像这样:self.tableview.estimatedRowHeight = 68.0;
将tableview
设置为使用'自动尺寸',如下所示:
self.tableview.rowHeight = UITableViewAutomaticDimension;
就是这样。如果你做这些事情,那么你的细胞的高度会根据它们的限制而变化。因此,如果您的一个子类由于其约束而具有150px的高度,那么它将在另一个高度为50px的子类旁边完美地工作。您还可以根据单元格的内容动态更改单元格的高度,例如,当您使用大于或等于'大于或等于'限制。另外 - 只需省略' heightForRowAtIndexPath
'方法,你根本不需要实现它。
答案 1 :(得分:0)
HeightForRowAtIndexPath
只返回一行的高度。因此cellForRowAtIndexPath
可能存在问题。
答案 2 :(得分:0)
您是否在呼叫tableView.reloadData()
?
在调用tableView.reloadData()
之前打印菜单对象的长度。