ViewController.m里
#import "ViewController.h"
#import "TestCollectionViewCell.h"
#import "DetailCollectionViewController.h"
#import "HeaderCollectionReusableView.h"
@interface ViewController ()<UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
@end
@implementation ViewController
NSString *identifier = @"cell";
NSString *headerIdentifier = @"header";
NSString *footerIdentifier = @"footer";
- (void)viewDidLoad {
[super viewDidLoad];
// 创建布局对象
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
// 1.设置最小行间距
flowLayout.minimumLineSpacing = 50;
// 2.设置最小列间距 (大于最小列间距后 自适应距离大小)
flowLayout.minimumInteritemSpacing = 20;
// 3.设置Item大小
flowLayout.itemSize = CGSizeMake(50, 50);
// 4.设置滚动方向 (水平 和 垂直)
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
// 5.设置集合视图内边距大小(上 左 下 右)
flowLayout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
// 6.设置header区域大小 (设置大小就要返回视图)
flowLayout.headerReferenceSize = CGSizeMake(414, 70);
// 7.设置footer区域大小
// flowLayout.footerReferenceSize = CGSizeMake(414, 40);
// 注册增补视图(没有头和尾 只有增补视图) UICollectionReusableView增补视图基类
// header注册
[collectionView registerClass:[HeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];
// footer注册
// [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier];
// 创建UICollectionView之前必须先创建布局对象
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[UIScreen mainScreen].bounds collectionViewLayout:flowLayout];
// 设置属性
collectionView.backgroundColor = [UIColor whiteColor];// 默认是黑色
// 是否显示垂直反向指示标 collectionView.showsVerticalScrollIndicator = NO;
// 设置代理
collectionView.delegate = self;
collectionView.dataSource = self;
// 注册cell
[collectionView registerClass:[TestCollectionViewCell class] forCellWithReuseIdentifier:identifier];
// 添加到视图上
[self.view addSubview:collectionView];
}
#pragma --- UICollectionViewDelegateFlowLayout ---
// 返回cell (必须实现一般自定义,因为属性少)
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
TestCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
cell.imgView.image = [UIImage imageNamed:@"2"];
return cell;
}
// 设置每个分区返回多少Item (必须实现)
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return 13;
}
// 设置区域个数
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 3;
}
// 返回增补视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
// 如果是头视图
if (kind == UICollectionElementKindSectionHeader) {
// 从重用池里面取
HeaderCollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:headerIdentifier forIndexPath:indexPath];
headerView.backgroundColor = [UIColor brownColor];
headerView.titleLabel.text = @"测试";
return headerView;
}else{
// UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier forIndexPath:indexPath];
// footerView.backgroundColor = [UIColor orangeColor];
// return footerView;
return nil;
}
}
// 点击每个item触发的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"%ld --- %ld",indexPath.section,indexPath.row);
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
DetailCollectionViewController *detailVC = [[DetailCollectionViewController alloc]
initWithCollectionViewLayout:flowLayout];
detailVC.collectionView.backgroundColor = [UIColor whiteColor];
[self.navigationController pushViewController:detailVC animated:YES];
}
// 指定哪些路径可以被点击
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
return NO;
}
return YES;}
// 返回内边距的上左下右的边距
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(30, 30, 30, 30);
}
HeaderCollectionReusableView.h里
#import <UIKit/UIKit.h>
@interface HeaderCollectionReusableView : UICollectionReusableView
@property (nonatomic,strong) UILabel *titleLabel;
@end
#import "HeaderCollectionReusableView.h"
@implementation HeaderCollectionReusableView
-(instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 200, 40)];
_titleLabel.backgroundColor = [UIColor redColor];
[self addSubview:_titleLabel];
}
return self;
}
@end
TestCollectionViewCell.h里
#import <UIKit/UIKit.h>
@interface TestCollectionViewCell : UICollectionViewCell
@property (nonatomic,strong) UIImageView *imgView;
@end
TestCollectionViewCell.h 里
@implementation TestCollectionViewCell- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
// 跟cell等大的imgView
self.imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
[self.contentView addSubview:_imgView];
}
return self;
}
@end
UICollectionView
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- iOS流布局UICollectionView系列二——UICollectionView的代理方法 一、引言 在上一...
- 前言 趁着这几天学习UICollectionView,也跟着别人的例子自己做了下关于UICollectionVie...
- 1.UICollectionView嵌套UICollectionView,为什么发生CollectionView横...
- “他那么不在乎我的想法,是不是因为他不是很爱我啊?”女友一脸失落,又用极其期盼的眼神望着我,希望我能给予她不一样的...