3

就像标题一样,这两种方法有什么不同?

我发现如果我用tableView设置它的高度:heightForRowAtIndexPath:,然后我想得到高度的值,我会得到一个正确的值:

CGFloat height = cell.frame.size.height;

但这是一个错误的值,结果是 44:

CGFloat height = tableview.rowHeight;

但是如果我以另一种方式设置它——setRowHeight:,我可以通过这两种方式获得正确的值。

那么它们之间有什么不同呢?

4

1 回答 1

5

rowHeight是 on 的一个属性,UITableView用于在委托未实现tableView:heightForRowAtIndexPath:方法时设置表格行高。

来自Apple 文档

如果委托未实现 tableView:heightForRowAtIndexPath: 方法,您可以设置单元格的行高。如果没有显式设置行高,UITableView 会将其设置为标准值。

当从委托方法返回行高时tableView:heightForRowAtIndexPath:,属性的值rowHeight设置为默认值(IMO,44 点)。

Apple 建议rowHeight在特殊用例中,

使用 tableView:heightForRowAtIndexPath: 代替 rowHeight 会影响性能。每次显示表视图时,它都会在委托上为其每一行调用 tableView:heightForRowAtIndexPath:,这可能会导致具有大量行(大约 1000 或更多)的表视图出现严重的性能问题。

根据我的经验tableView:heightForRowAtIndexPath:,当单元格高度是动态的时使用。例如,您必须在每个单元格中显示不同高度的多行文本。在这种情况下,使用此委托方法计算并返回单元格的动态高度。

希望有帮助!

于 2013-10-16T07:34:39.297 回答