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

相关推荐
青花瓷7 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
2401_865854889 小时前
iOS应用想要下载到手机上只能苹果签名吗?
后端·ios·iphone
HackerTom21 小时前
iOS用rime且导入自制输入方案
ios·iphone·rime
良技漫谈21 小时前
Rust移动开发:Rust在iOS端集成使用介绍
后端·程序人生·ios·rust·objective-c·swift
2401_8524035521 小时前
高效管理iPhone存储:苹果手机怎么删除相似照片
ios·智能手机·iphone
星际码仔1 天前
【动画图解】是怎样的方法,能被称作是 Flutter Widget 系统的核心?
android·flutter·ios
emperinter1 天前
WordCloudStudio:AI生成模版为您的文字云创意赋能 !
图像处理·人工智能·macos·ios·信息可视化·iphone
关键帧Keyframe1 天前
音视频面试题集锦第 8 期
ios·音视频开发·客户端
pb82 天前
引入最新fluwx2.5.4的时候报错
flutter·ios
Rverdoser2 天前
xcode更新完最新版本无法运行调试
xcode