iOS开发之UICollectionView
2018-04-12 本文已影响79人
朱晓晓的技术博客
1.UICollectionView section的头视图 复用BUG解决
第一次在项目中运用到UICollectionView添加头视图的情况,
而且每个section的headerVeiw大小不一样,
在运行时出现了headerView复用导致其他section的头视图大小和前面的一样,
一开始的想法是每次都新建UICollectionReusableView对象,
而不从闲置池中拉取,
但遗憾的是木有找到这个实例化方法(有知道的大神请告知一下),
所以就想到了在复用headerView之前先将其中的子视图remove掉,
这样就可以避免BUG
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];
for (UIView *view in headerView.subviews) {
[view removeFromSuperview];
}
}
image.png
2.collectionViewCell防止复用的两种方法
第一种:
//在创建collectionView的时候注册cell(一个分区)
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@“cell" forIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
第二种:
//在cellForItem方法中注册cell(多个分区)
NSString *identifier=[NSString stringWithFormat:@"%ld%ld",(long)indexPath.section,(long)indexPath.row];
[collect registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:identifier];
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
for(id subView in cell.contentView.subviews){
if(subView){
[subView removeFromSuperview];
}