美文网首页iOS归纳
iOS collectionview的headerView的正确

iOS collectionview的headerView的正确

作者: 追梦小怪兽 | 来源:发表于2018-05-08 17:43 被阅读0次

    问题:

    1. collectionview 的header会重复添加。
    2. collectionview 的header数据错乱。
    • tableView的header倒是没有什么问题,但是今天在使用collectionview设置header的时候就出现问题了。

    • 刚开始我用的系统的UICollectionReusableView 那么就会出现一个问题,在header 的地方你每次刷新他都会初始化一个 view ,打开界面一看我擦,好多个headerView 重叠在一起了,于是查了大佬们的方法,看到都是说判断这个view 的subviews.count 如果为0那么就添加你要添加的子视图。对这样是解决了重叠的问题。

    • 但是问题又来了,当你刷新的时候,你会发现你的headerView上面的数据错乱了,此时就应该是headerView 的复用的问题了。复用了之后直接将子视图也复用了,所以导致数据没有根据自己的indexPath.section 去赋值。整了半天没有明白怎么回事,然后就自定义了一个header,完美搞定。

    代码:

    // headerView 的.m 文件。这个没有说的 .h 就一个属性
    #import "CarcorderHeaderView.h"
    
    @implementation CarcorderHeaderView
    
    - (id)initWithFrame:(CGRect)frame{
        self = [super initWithFrame:frame];
        if (self){
            self.backgroundColor = [[UIColor alloc] initWithRed:1 green:1 blue:1 alpha:0.95];
            [self createLab];
        }
        return self;
    }
    - (void)createLab{
        self.headerLab = [TaoUI createLableWithText:nil backgroundColor:nil textColor:UIColorFromRGB(0x666666) font:16.0 numberOfLines:0 textAlignment:NSTextAlignmentLeft boderColor:nil];
        [self addSubview:self.headerLab];
        [self.headerLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.mas_left).offset(15);
            make.right.top.bottom.equalTo(self);
        }];
    }
    
    @end
    

    collectionview 注册headerView

    [self.collectionView registerClass:[CarcorderHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerV"];
    

    接下来在collectionview 的代理方法中操作headerView;

    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
        CarcorderHeaderView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerV" forIndexPath:indexPath];
        // if (self.dataArr.count == 0) return view; 这里之前没有注意,直接return view 的话 刷新会看到这个view,通过下面处理就行了。
        if (self.dataArr.count == 0){
            view.backgroundColor = [UIColor clearColor];
            return view;
        }
        // 这里就随便你怎么写了。我这个很简单只是一个日期的展示。。OK ,headerView 重复添加的问题搞定,数据错乱的问题搞定。
        NSString *timeStr =  ((YourModel*)self.dataArr[indexPath.section][indexPath.row]).startTime
        view.headerLab.text = timeStr;
    }
    

    希望有好办法的朋友给个连接。
    希望能帮助遇到过同样问题的小伙伴吧。。

    ---来自涛胖子的工作笔记

    相关文章

      网友评论

        本文标题:iOS collectionview的headerView的正确

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