- collectionView reloadData() 闪烁问题
- UITableView,UICollectionView判断re
- UITableView ReloadData时 animateW
- UICollectionView系统BUG记录 -— reloa
- UICollectionView reloadData后立即获取
- UICollectionView reloadData后立即获取
- iOS判断 UITableView reloadData结束
- iOS UITableView reloadData之后setC
- UICollectionView中的Delete,insert,
- UITableView/UICollectionView调用re
背景
在iPhone6s plus机型上,UICollectionView reloadData之后,出现UICollectionViewCell被隐藏,查看cell的hidden属性均为YES。
问题定位和猜测
因为起初在相对高端的机型(例如iPhoneX,iPhone14)上,都没有出现过这样的问题,只在iphone6s上遇到了这个问题。这台iphone6s plus测试机十分卡顿,硬存内存都不多。同样的代码,在高端机型上ok,排除了代码存在的bug,所以首先怀疑:是不是机器的性能不够?因为如果当前runloop提交了过多的UI更新的话,在UI update阶段,可能处理不完,导致有些UI更新的任务被抛弃,导致cell的正常显示受到影响。
查资料的过程中,看到这位老哥的博客:https://www.cnblogs.com/elladu/p/5953261.html#!comments,将reloadData任务放在主线程后执行,玄学地就解决了问题。
下面给出一种可能的解释:
虽然当前代码已经在主线程上执行了,但是由于可能提交了过多的UI任务,会导致部分任务被抛弃。
而主动将任务放在主队列执行,dispatch_async带的block的代码会在下一个runloop才执行,这样就避免了当前runloop任务过于繁重导致任务被抛弃的问题。
网友评论