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

相关推荐
2501_9151063211 分钟前
iOS App 测试工具全景分析,构建从开发调试到线上监控的多阶段工具链体系
android·测试工具·ios·小程序·uni-app·iphone·webview
Digitally4 小时前
如何通过蓝牙将联系人从 iPhone 传输到 Android
android·ios·iphone
90后的晨仔4 小时前
2025年11月27日年解决隐私清单导致审核总是提示二进制无效的问题
ios
songgeb5 小时前
iOS Audio后台模式下能否执行非Audio逻辑
ios·swift
如此风景5 小时前
Swift的Extension简单说明
ios
kk哥889912 小时前
iOS开发:关于日志框架
网络·ios·cocoa
Haha_bj1 天前
Swift UI 状态管理
ios·app
2501_916007471 天前
iOS 应用性能测试的工程化流程,构建从指标采集到问题归因的多工具协同测试体系
android·ios·小程序·https·uni-app·iphone·webview
源码_V_saaskw1 天前
JAVA国际版同城跑腿源码快递代取帮买帮送同城服务源码支持Android+IOS+H5
android·java·ios·微信小程序
tbit1 天前
fluwx 拉起小程序WXLog:Error:fail to load Keychain status:-25300, keyData null:1
flutter·ios·微信小程序