美文网首页
collectionViewLayout值切换引发崩溃

collectionViewLayout值切换引发崩溃

作者: 程程程程程子 | 来源:发表于2020-04-01 19:39 被阅读0次

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

    需求描述:根据用户切换按钮,调整书架是列表模式(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) {

    }];

    相关文章

      网友评论

          本文标题:collectionViewLayout值切换引发崩溃

          本文链接:https://www.haomeiwen.com/subject/mitzuhtx.html