iOS 关于UICollection刷新VisibleItems导致的问题

一、问题描述

1、起源:项目中一个页面中的UICollectionView拥有数千数据源,为了节约系统性能,采用以下刷新方式

self.collection.reloadItems(at: self.collection.indexPathsForVisibleItems)

2、现象:有不确定数目的cell直接忽略了cell重置方法导致显示异常

 public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}


二、原因描述

在iOS10中,苹果为UICollectionViewCell引入了Pre-Fetching预加载机制用于提升它的性能。Pre-Fetching中的isPrefetchingEnabled默认开启,预加载的indexPaths数量不定,由滑动状态确定。未能刷新Pre-Fetching中的cell为此次事件的问题。


三、解决方案

出于性能考虑我们坚持刷新局部cells,实现UICollectionViewDataSourcePrefetching代理,并记录当前确定的indexPaths存储

self.collection.reloadItems(at: self.collection.indexPathsForVisibleItems+preIndexPaths)


四、进一步

官方文档中提示开启Pre-Fetching会开始导致代理"cellForItemAt"请求超过常规需要展示的数量,请使用代理“willDisplay”更新视图操作

突然吐槽一下 既然优化这么牛批 为啥还是个果冻屏(气哭了)

五、链接

发现的stackoverflow早期回答

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容