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

相关推荐
老李IT笔记7 小时前
设备指纹由哪几个字段拼出来:换一块主板会变成新设备
ios·智能手机
andyweike8 小时前
iOS App 测试
ios·测试·ad hoc·分发
茶底世界之下17 小时前
花瓣要更柔和,还是更有反差?用 Awaking 做一次对比度取舍
ios
Anhty2 天前
2026最新免费手机音频处理工具 !!
android·功能测试·ios·智能手机·音视频
2501_915909062 天前
iOS应用从开发到上架App Store的完整发布流程与步骤指南
android·ios·小程序·https·uni-app·webview
初雪云2 天前
UniApp 云打包拿到 IPA 后,真正的发布工作才刚开始
ios·自动化·编辑器·产品经理·iphone
Lancker2 天前
没有 Mac 也能上架 iOS:GitHub Actions 全自动构建 + 签名 + TestFlight 送审实录
macos·ios·github
茶底世界之下2 天前
晚霞要多暖?用 Awaking 只改色温做一次取舍
ios
酒神dnspup2 天前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
福兮说2 天前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic