预创建UICollectionView单元格 - 布局问题

时间:2014-02-10 15:06:53

标签: performance uitableview uicollectionview autolayout uicollectionviewcell

我有一个UITableView,有6行。每行包含一个UICollectionView。每个集合视图包含一个包含10-15个单元格的部分。一个视图控制器是表视图和集合视图的数据源和委托。

enter image description here

我想在滚动tableview时解决一些性能问题。每当一个新的部分进入视图时,在创建和填充集合视图时会有一个小暂停。由于我有一定数量的单元格(< 100)并且它们几乎静态(它们最初是从Web API加载的,但数据每周只会改变几次),我会喜欢事先预先构建每个集合视图单元格。我希望用户在发布时等待额外的半秒,而不是遇到不稳定的滚动。

为了实现这一点,我更新了我的collectionView: cellForItemAtIndexPath:以检查我正在维护的单元格字典。它查找从集合视图索引和单元的indexPath合成的密钥。如果密钥存在,则返回相应的对象。如果未找到,则构建单元格并将其添加到字典中。此步骤有效地防止了细胞被卸载和回收,但代价是使用更多内存。

但是在发布时,我仍然需要为每个单元格运行一次以预先填充字典。我遍历每个表视图单元格,找到集合视图,然后调用

[self collectionView:collectionView cellForItemAtIndexPath:indexPath];

这几乎就够了。正在创建单元格并将其存储在字典中,当我滚动到新的集合视图时,我看到它们正从字典中拉出并显示。但是所有的细胞及其所有内容都被推到了{0,0}的左上角。

某些日志记录告诉我,在创建单元格时,集合视图的框架为{{0,0},{0,0}}。我假设这就是为什么我的布局都没有被应用?

我该如何解决这个问题?

(对我的预加载实施的任何一般性评论也会感兴趣。)

1 个答案:

答案 0 :(得分:0)

我通过在[cell layoutIfNeeded]集合视图)上调用UITableViewCell来解决此问题。欢迎提供更全面的解释。