最近使用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来实现。
网友评论