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

相关推荐
百锦再36 分钟前
Android Studio 项目文件夹结构详解
android·java·ide·ios·app·android studio·idea
season_zhu2 小时前
iOS开发:关于URL解析
ios·json·swift
iOS大前端海猫3 小时前
深入解析 Swift 中的并发属性包装器:@Actor、@MainActor 和 @GlobalActor
ios·app
溪饱鱼4 小时前
DHgate爆火背后的技术原因
android·前端·ios
增强5 小时前
腾讯云 人脸核身 Flutter 插件功能开发(一 IOS 端实现)
ios
鸿蒙布道师8 小时前
鸿蒙NEXT开发图片相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
东东爱编码8 小时前
一路磕磕绊绊解决flutter doctor 报错CocoaPods not installed
flutter·xcode·cocoapods
yzwdzkn1 天前
解决Flutter 2.10.5在升级Xcode 16后的各种报错
flutter·macos·xcode
Unlimitedz1 天前
iOS内存管理中的强引用问题
macos·ios·cocoa
雨夜赶路人1 天前
iOS开发--接入ADMob广告失败
ios