iOS UIColletionView实现header和footter

// ProfileViewController.m
// scxhgh
// Created by xmkjsoft on 2024/7/16.

#import "ProfileViewController.h"

@interface ProfileViewController () <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

@property (nonatomic, strong) UICollectionView *collectionView; // 声明UICollectionView属性

@end

@implementation ProfileViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 设置背景色
    self.view.backgroundColor = [UIColor whiteColor];
 
    // 创建并设置UICollectionView
    [self setupCollectionView];
}

- (void)setupCollectionView {
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.itemSize = CGSizeMake(100, 100); // 设置每个cell的大小
    layout.minimumLineSpacing = 10; // 设置行间距
    layout.minimumInteritemSpacing = 10; // 设置列间距
    layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); // 设置section的内边距

    // 设置header的大小
    layout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 50);
    // 设置footer的大小
    layout.footerReferenceSize = CGSizeMake(self.view.frame.size.width, 50);

    self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
    self.collectionView.dataSource = self;
    self.collectionView.delegate = self;
    self.collectionView.backgroundColor = [UIColor whiteColor];

    // 注册cell类
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    
    // 注册header类
    [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerIdentifier"];
    
    // 注册footer类
    [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerIdentifier"];

    [self.view addSubview:self.collectionView];
}

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerIdentifier" forIndexPath:indexPath];
        
        // 移除之前的所有子视图,避免复用问题
        [headerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
        
        // 添加一个UILabel到headerView
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:headerView.bounds];
        titleLabel.text = @"这是Header";
        titleLabel.textAlignment = NSTextAlignmentCenter;
        titleLabel.textColor = [UIColor blackColor];
        [headerView addSubview:titleLabel];
        
        return headerView;
    } else if ([kind isEqualToString:UICollectionElementKindSectionFooter]) {
        UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footerIdentifier" forIndexPath:indexPath];
        
        // 移除之前的所有子视图,避免复用问题
        [footerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
        
        // 添加一个UILabel到footerView
        UILabel *footerLabel = [[UILabel alloc] initWithFrame:footerView.bounds];
        footerLabel.text = @"这是Footer";
        footerLabel.textAlignment = NSTextAlignmentCenter;
        footerLabel.textColor = [UIColor grayColor];
        [footerView addSubview:footerLabel];
        
        return footerView;
    }
    return nil;
}

#pragma mark - UICollectionViewDataSource

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1; // 返回section的数量
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 5; // 返回每个section中item的数量
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor systemBlueColor]; // 设置cell的背景色

    // 可以在这里添加更多的自定义内容,比如在cell上添加一个UILabel
    UILabel *label = [[UILabel alloc] initWithFrame:cell.contentView.bounds];
    label.text = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
    label.textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    [cell.contentView addSubview:label];

    return cell;
}

#pragma mark - UICollectionViewDelegateFlowLayout

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    // 设置列数
    NSInteger numberOfColumns = 5;
    
    // 获取当前屏幕的宽度
    CGFloat totalWidth = collectionView.bounds.size.width;
    
    // 设置section的内边距(与layout.sectionInset一致)
    CGFloat sectionInset = 10.0;
    
    // 设置item之间的最小列间距(与layout.minimumInteritemSpacing一致)
    CGFloat minimumInteritemSpacing = 10.0;
    
    // 计算item的宽度
    CGFloat itemWidth = (totalWidth - (sectionInset * 2) - ((numberOfColumns - 1) * minimumInteritemSpacing)) / numberOfColumns;
    
    // 返回item的大小
    return CGSizeMake(itemWidth, itemWidth);
}

@end
 

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值