UICollectionView 隐式动画的问题

最近使用UICollectionView来布局页面,在开发过程中发现一个问题。

创建UICollectionView的头部的代理方法viewForSupplementaryElementOfKind,当手动调用UICollectionView的reloadData时,viewForSupplementaryElementOfKind方法不会回调。

1、需求:

collectionView的header需要根据数据进行不同的布局,各种布局高度也不一样。

2、方案:

(方案相对比较粗暴,如有更好的方案,还望不吝赐教)
注释:collectionView采用懒加载方式加载

2.1、reloadData 会引起collectionView的隐式动画
[_collectionView removeFromeSupView];
_collectionView = nil;
[self.collectionView reloadData];
2.2、我采用的方案
 [_collectionView removeFromSuperview];
  _collectionView = nil;
 [UIView animateWithDuration:0 animations:^{
       [self.collectionView performBatchUpdates:^{
           [self.collectionView reloadData];
       } completion:nil];
 }];
2.3、关闭collectionView隐式动画的另一方案
[UIView setAnimationsEnabled:NO];
[collectionView performBatchUpdates:^{
    [collectionView reloadData];
} completion:^(BOOL finished) {
    [UIView setAnimationsEnabled:YES];
}];

总结

lz采用的方案相对比较粗暴,其实还有其他方案的。比如:把headerView用UICollectionViewCell来实现。

猜你喜欢

转载自blog.csdn.net/weixin_34130269/article/details/87128957
今日推荐