【问题标题】:How to load all cells of UICollectionView at once?如何一次加载 UICollectionView 的所有单元格?
【发布时间】:2014-06-20 13:51:15
【问题描述】:

我有一个UICollectionView,里面有很多单元格。我想加载viewDidLoad 中的所有单元格,但UICollectionView 仅在它们可见时才加载其单元格。

有什么建议吗?

【问题讨论】:

  • 这不是集合视图背后的想法,您可能只想在UIScrollView 中使用普通的UIView 对象。
  • 您能否说明您不想利用单元重用的原因?
  • 未实例化的图像会导致滚动滞后。
  • 我认为这是一个很好的问题,拒绝这个问题的人直接粗鲁。

标签: objective-c uicollectionview cells


【解决方案1】:

为了重申问题,集合视图单元格包含延迟加载的图像,但您要求它们立即显示。您的问题背后的想法是强制集合视图预加载它的所有单元格。但你并不真正想要细胞,你想要图像,所以让我们获取图像。

这个问题没有包含太多关于图像在哪里、模型或您在数据源方法中加载它们的方法的详细信息,所以这里是建议的大纲(如果你可以更具体地编辑发布更多细节):

对于通过imageNamed:实例化的本地图像,创建一个字典,其键是图像名称,值是实例化的图像,在集合视图显示之前构建该字典,然后在数据源方法中使用该字典。

对于远程图像,您的集合视图数据源必须异步获取这些图像。 I gave an answer here that covers this in detail.

无论如何,@CrimsonChris 对预加载单元格持怀疑态度是正确的。在我看来,他的回答是不明智的。 (我认为他也是这么认为的,但他试图提供书面问题的答案)。

【讨论】:

  • 感谢您的回答,这正是我的问题。图片是本地的。我会研究你的链接:)
【解决方案2】:

viewDidLoad 中创建单元格并将它们放入数组或字典中。然后在cellForItemAtIndexPath: 中返回正确的那个。这种方法不会利用单元重用,并且可能会使用大量内存。但是,它的滚动可能会稍微平滑一些,因为不需要在滚动时设置单元格。

【讨论】:

  • @MrMojoRisin,我认为这是对所提问题的一个很好的回答,但问题要求一些不应该做的事情。所以答案建议了一些不应该做的事情。
  • 我希望我的回答会被解释为“不要这样做”。