UICollectionView系统BUG记录 -— reloadData后变空白,cellForItemAtIndexPath不执行


起因

项目里在间隔很短时间内去重复reloadData,出现UICollectionView在reloadData后变成空白,contentSize正常,页面能够正常滑动,但是所有的cell都不显示,visiableCells属性为空。调试发现唯独cellForItemAtIndexPath这个回调方法不执行。
ps: 也有人遇到说界面上所有的cell的hidden属性都变为YES了,其实所有滑出页进入复用池的cell都会被hidden。

调研:

通过对比发现collectionView变空白前后的属性,发现_reloadingSuspendedCount这个私有属性的值被置为-1。

变空白前后属性对比.png

最终发现这个属性为0时,reloadData才会真正执行的,它在insert、delete、move操作前会先被++,以保证在执行相关动效是不被reloadData打乱,执行完毕后--。调试发现值会<0,特别是前一次reload未执行完毕又reload一次。

解决方案

利用runtime将_resumeReloads属性替换,发现_reloadingSuspendedCount < 0时及时纠正为0。
个人库

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容