在 UICollectionView 中重新加载数据后保持 collectionview 速度

Posted

技术标签:

【中文标题】在 UICollectionView 中重新加载数据后保持 collectionview 速度【英文标题】:Maintain collectionview speed after reloading data in UICollectionView 【发布时间】:2017-11-10 12:11:24 【问题描述】:

我正在使用 UICollectionView 实现一个聊天应用程序。最初我只获取 100 条消息。当用户滚动时,我会获取更多消息,然后重新加载集合视图。为了保持滚动位置,我设置了内容偏移量,但滚动停止了。重新加载 UICollectionView 后如何保持滚动速度,让用户不会感到手忙脚乱?

【问题讨论】:

只是不要重新加载集合视图。当它滚动时,请求新数据并将其延迟加载到单元格中。 【参考方案1】:

您可以尝试使用ios10中引入的prefetchDataSource。

UICollectionView Prefetch Data Source in iOS 10?

【讨论】:

预取数据不是问题。它工作正常。唯一的问题是,在重新加载 collectionView 后,滚动停止,所以用户感觉很笨拙。【参考方案2】:

有几种方法可以处理这个问题。

    您不使用reloadData(),而是使用insertItemsAtIndexPaths:,这样您就不必重新构建整个表,而只构建您需要的项目。

    当使用命中集合视图的特定点时,您会加载额外的数据。在willDisplayCell 方法中,您可以检查单元格的indexPath 是否接近数据源中的最后一个索引并加载其他行。在用户滚动到最后一项的那一刻,所有的东西都已经在那里了,所以你不用担心。

根据我的经验,最好的方法是结合使用这两种方法。因为通常根据您的单元格布局,不时使用reloadData() 可能非常有用。

【讨论】:

以上是关于在 UICollectionView 中重新加载数据后保持 collectionview 速度的主要内容,如果未能解决你的问题,请参考以下文章

UIcollectionView在ios 7中重新加载重叠

如何在不重新加载标题的情况下重新加载 UICollectionView 中的单元格?

在 UICollectionView 中重新加载数据后保持 collectionview 速度

如何在 UICollectionView 中强制重新加载自定义单元格?

在 ios 的 UITableView 或 UICollectionView 中重新加载数据的最佳位置是啥

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头