IOS UICollectiontView头视图重用问题

今天写项目时 用到了collectionview,但是在添加了头视图之后,发现按钮一会能点一会不能点,当我把view背景色变成红色之后,发现上面又覆盖了一层。

IOS UICollectiontView头视图重用问题_第1张图片
FUGAI.png

最后用了暴力解决方法

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        
        
        UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"forIndexPath:indexPath];
        header.backgroundColor = [UIColor redColor];
        
        for (UIView *view in header.subviews) {
            
            
            [view removeFromSuperview];
        }
        
        
        if (indexPath.section == 0) {

            self.topLabel.text = @"点我";
            self.topLabel.backgroundColor = [UIColor yellowColor];
            self.topLabel.textAlignment = NSTextAlignmentCenter;
            self.topLabel.font = H15;
            self.topLabel.textColor = [UIColor grayColor];
            [header addSubview:self.topLabel];

        }
           return header;

    
    }else{
  
        UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header2"forIndexPath:indexPath];
        header.backgroundColor = [UIColor greenColor];
        return header;
    
    }

}


这里本来想直接return nil 但是发现return nil 之后 直接就挂了 所以又在上面注册了第二个header视图

     [_mainCollectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
     [_mainCollectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header2"];

添加头视图方法

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
  
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {

}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
}

目前能想到的方案是这样 不知道大家有没有更好的方案。

你可能感兴趣的:(IOS UICollectiontView头视图重用问题)