0

heightForRowAtIndexPath当您有很多细胞时,这是一项非常昂贵的操作。就我而言,我有数千个,所以我想我可能会分批分解表格并一次只显示 50 个单元格,并且当用户接近表格视图边界的末尾时,使用insertRowsAtIndexPaths:插入 50 多行。但是,每次我插入 50 个新行时,heightForRowAtIndexPath都会为表的所有行调用,而不仅仅是我刚刚插入的行。这是预期的行为吗?为什么是这样?我的行高必须用字体计算字符串的高度,因此每次插入新行时计算整个表格的高度是非常低效的。有什么解决方法吗?

4

2 回答 2

2

我同意@Anne。之所以需要调用它,是因为表中的行位置(只是一个滚动视图)是由其上方行的位置和高度确定的。

@Anne 的处方也非常正确,归结为让 height 方法尽可能快地运行。

但真正的问题是给你的。我认为你应该问的“性能”问题是关于人的表现,翻阅 1000 行。

假设一个拇指轻弹可以滚动 10 行并在一秒钟内执行。那是每千人 1.5 分钟。100 万用户使用您的应用程序每天滚动 5000 行一次,每年将消耗 190 万个工作日,从而按比例减少国家 GDP。

我祝您取得最大的成功,但在分发具有 1000 行 UITableView 行的应用程序之前,请考虑全球经济的不稳定状态。

于 2012-06-23T19:57:02.233 回答
2

这是预期的行为吗?为什么是这样?

是的,这使得可以将不同高度的行插入到一个表中。

有什么解决方法吗?

如果所有行的高度相同,则在初始化期间仅计算一次高度。
每次heightForRowAtIndexPath调用,只需返回缓存的结果。

于 2012-06-23T18:39:50.750 回答