estimatedHeightForRowAtIndexPath被多次调用,导致jantky uitableview

时间:2016-01-22 18:26:57

标签: ios swift uitableview ios-autolayout uitableviewautomaticdimension

我在应用程序中有一个要求,几乎每个uitableviewcell都有不同的高度。此外,许多单元格都有图像(1,2或3)和文本。

之前我使用的是 heightForRowAtIndexpath ,但是像往常一样,表现非常可怜,生涩的感觉,

我确实关注了这个问题,

  1. 已实施 estimatedHeightForRowAtIndexPath
  2. 用于后续调用estimatedHeightForRowAtIndexPath
  3. 的计算高度的已用缓存
  4. 在所有单元格中使用自动布局。
  5. 与之前的方法相比,性能要好得多, 但是, estimatedHeightForRowAtIndexPath 随后被调用了很多次,因为列表不稳定。

    如果加载了单元格编号 N estimatedHeightForRowAtIndexPath 将被称为 N-1 次,如果我们进一步列表,就会发生这种情况如果我们向后退,它就知道估计的高度。

    请帮助我理解为什么会发生这种情况,我该怎么做才能提高性能并使滚动无抖动。

2 个答案:

答案 0 :(得分:1)

为了使表格顺利,我使用这个策略..

  1. 每当我填充tableView数据源时,我都会计算每个单元格的高度。我将每个单元格的高度存储在数组cellHeights
  2. heightforRowAtIndexPath中,我返回cellHeights[indexPath.row]
  3. 结果转换一直非常流畅:)

答案 1 :(得分:0)

而不是指责框架“经常”发送消息,你应该责怪自己的代码,因为它的响应速度不够快。你说:

  

早些时候我使用的是heightForRowAtIndexpath但是像往常一样,表现非常可怜,生涩的感觉

但你的“像往常一样”是错误的。如果您无法立即从@SuppressWarnings 返回结果,则此方法的实现是错误的。你应该“记住”你的身高计算,这样,一旦计算了一行的高度,你就知道它的身高。