0

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

早些时候我使用heightForRowAtIndexpath但像往常一样,性能非常可悲,感觉很生涩,

我做了以下来解决这个问题,

  1. 实现了估计的HeightForRowAtIndexPath
  2. 用于计算高度的缓存,用于后续调用estimatedHeightForRowAtIndexPath
  3. 在所有单元格中使用自动布局。

这样,与以前的方法相比,性能要好得多,但是,由于列表是生涩的,因此估计的HeightForRowAtIndexPath 随后被调用了很多次。

如果单元格编号N被加载,estimatedHeightForRowAtIndexPath被调用N-1次,如果我们在列表中走得更远,就会发生这种情况,如果我们向后走,它就会知道估计的高度。

请帮助我理解为什么会发生这种情况,以及我可以做些什么来提高性能并使滚动更流畅和流畅。

4

2 回答 2

1

为了使桌子光滑,我使用这个策略..

  1. 每当我填充我的 tableView 数据源时,我都会计算每个单元格的高度。我将每个单元格的高度存储在一个数组中cellHeights
  2. heightforRowAtIndexPath,我回来了cellHeights[indexPath.row]

由此产生的过渡一直非常顺利:)

于 2016-01-22T22:43:41.837 回答
0

与其责怪框架“过于频繁地”向你发送消息,不如责怪你自己的代码响应不够快。你说:

早些时候我使用 heightForRowAtIndexpath 但像往常一样,性能非常可悲,感觉很生涩

但是你的“像往常一样”是错误的。如果您不能从heightForRowAtIndexPath: 即时返回结果,那么您对这个方法的实现是错误的。您应该“记住”您的高度计算,以便在计算一次行的高度之后,您就永远知道它的高度。

于 2016-01-22T22:48:08.723 回答