collectionViewLayout值切换引发崩溃

最近在做阅读书架更改布局的功能。
遇到莫名其妙的崩溃数次。

需求描述:根据用户切换按钮,调整书架是列表模式(tableView单行,每行一个单元)还是网格模式(collectionView一行多列)。
所以会根据用户的选择,设置collectionViewLayout。

1.刚开始代码如下
self.collectionView.collectionViewLayout = layout;
[self.collectionView reloadData];

但是这样iOS11一下会直接崩,崩溃点在self.collectionView.collectionViewLayout = layout;后调用layoutAttributes相关修改api上,解决方式,调换位置。
[self.collectionView reloadData];
self.collectionView.collectionViewLayout = layout;

2.iOS9在切换的时候还会崩,报错 index out of bounds
应该是CollectioView缓存layout相关元素信息导致,解决方式
[self.collectionView reloadData];
[self.collectionView.collectionViewLayout invalidateLayout];
[self.collectionView layoutIfNeeded];
self.collectionView.collectionViewLayout = layout;

3.这样的切换,会影响一些cell的UI子控件刷新
解决方式,可以考虑把当前visibleCell在设置新的layout后再reload一次

[self.collectionView reloadData];
[self.collectionView.collectionViewLayout invalidateLayout];
[self.collectionView layoutIfNeeded];
self.collectionView.collectionViewLayout = layout;

///强制刷新visible cell

[self.collectionView performBatchUpdates:^{
[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];
} completion:^(BOOL finished) {

}];

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

相关阅读更多精彩内容

友情链接更多精彩内容