UICollectionView 的分组比TableView要复杂一点,在这里记录下把

总的说要这几步:‘

1、注册  UICollectionElementKindSectionHeader

2、新建 UICollectionReusableView 文件

3、设置代理方法

上代码:

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
    self.mainCollectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];
    self.mainCollectionView.backgroundColor = [UIColor whiteColor];
    self.mainCollectionView.delegate = self;
    self.mainCollectionView.dataSource = self;

    [self.mainCollectionView registerClass:[MCInterestTagsCollectionViewCell class] forCellWithReuseIdentifier:@"MCInterestTagsCollectionViewCell"];
    [self.mainCollectionView registerClass:[MCInterestCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MCInterestCollectionReusableView"];

    [self.bgView addSubview:self.mainCollectionView];
    [self.mainCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(self.bgView).offset(24);
        make.left.right.equalTo(self.bgView);
        make.bottom.equalTo(self.bgView.mas_bottom).offset(-kTabBarHeight);
    }];
#pragma mark - CollectionView数据源

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 2;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    if (section == 0) {
        return self.alertSelectArr.count;
    }
    return self.couleSelectArr.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    MCInterestTagsCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MCInterestTagsCollectionViewCell" forIndexPath:indexPath];
    if (indexPath.section == 0) {
        cell.tageType = MCInterestTagsTypeAlert;
        cell.tagStr = [self.alertSelectArr objectOrNilAtIndex:indexPath.item];
        cell.deleteBtnClickBlock = ^{
            NSLog(@"删除:%@",[self.alertSelectArr objectOrNilAtIndex:indexPath.item]);
        };
    } else {
        cell.tageType = MCInterestTagsTypeCould;
        cell.tagStr = [self.couleSelectArr objectOrNilAtIndex:indexPath.item];
        cell.selectBtnClickBlock = ^{
            NSLog(@"选中:%@",[self.couleSelectArr objectOrNilAtIndex:indexPath.item]);
        };
    }

    return cell;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return [MCInterestTagsCollectionViewCell cellSize];
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 10, 0, 10);
}

// 每横行之间间距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return CGFLOAT_MIN;
}

// 每竖行
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return CGFLOAT_MIN;
}

//头部视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    MCInterestCollectionReusableView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"MCInterestCollectionReusableView" forIndexPath:indexPath];
    if (indexPath.section == 0) {
        headView.labTitle.text = @"已选兴趣标签";
    } else if (indexPath.section == 1) {
        headView.labTitle.text = @"可选兴趣标签";
    }
    return headView;
}

//头部视图frame
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
    return CGSizeMake(kScreenWidth, 66);
}

//底部视图fram
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    return CGSizeZero;
}

MCInterestCollectionReusableView.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

//collection 头部视图

@interface MCInterestCollectionReusableView : UICollectionReusableView

@property (nonatomic, strong) UILabel *labTitle;


@end

NS_ASSUME_NONNULL_END

MCInterestCollectionReusableView.m

#import "MCInterestCollectionReusableView.h"

@implementation MCInterestCollectionReusableView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor whiteColor];
        self.labTitle = [[UILabel alloc] init];
        self.labTitle.font = [UIFont PingFangRegularFont:14];
        self.labTitle.textColor = [UIColor colorWithHexString:@"#292929"];
        [self addSubview:self.labTitle];
        [self.labTitle mas_makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(self);
            make.left.equalTo(self).offset(16);
        }];
    }
    return self;
}

@end
01-06 01:34