说来有些惭愧,做了多少年的IOS,13年苹果就发布了UICollectionViewController,各种原因导致一只没有在项目中使用过,业余时间也没学习过。从此处开篇,谦虚的沉下心来做技术。
项目github下载地址
基础用法
一个简单的例子,新建一个CollectionViewController:
//
// CollectionViewController.m
// UICollectionVIewDemo
//
// Created by DaLei on 2017/6/7.
// Copyright © 2017年 DaLei. All rights reserved.
//
#import "CollectionViewController.h"
#import "CollectionViewCell.h"
@interface CollectionViewController ()
@end
@implementation CollectionViewController
static NSString * const reuseIdentifier = @"CollectionViewCell";
-(instancetype)init{
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
layout.itemSize = CGSizeMake(103, 103);
// 设置最小行间距
layout.minimumLineSpacing = 20;
// 设置垂直间距
layout.minimumInteritemSpacing = 0;
// 设置边缘的间距,默认是{0,0,0,0}
layout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
return [self initWithCollectionViewLayout:layout];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"首页";
// Register cell classes
[self.collectionView registerNib:[UINib nibWithNibName:NSStringFromClass([CollectionViewCell class]) bundle:nil] forCellWithReuseIdentifier:reuseIdentifier];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark <UICollectionViewDataSource>
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 2;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 40;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
return cell;
}
#pragma mark <UICollectionViewDelegate>
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"------%zd", indexPath.section);
NSLog(@"------%zd", indexPath.item);
}
@end
新建一个UICollectionViewCell的子类,创建的时候可以使用Xib(毕竟简单场景下使用Xib可以减少不少的代码量)。什么也不做直接拖一个图片到视图中。
运行效果如下:
最基本的应用实例就算完成了。跟UITableViewController很相似,关键在于
UICollectionViewFlowLayout
的布局需要自己手动的完成。如果不实现布局的情况下,项目是会报错的。点击进去看一下
UICollectionViewFlowLayout
的属性://设置行与行之间的间距最小距离
@property (nonatomic) CGFloat minimumLineSpacing;
//设置列与列之间的间距最小距离
@property (nonatomic) CGFloat minimumInteritemSpacing;
//设置每个item的大小
@property (nonatomic) CGSize itemSize;
//设置每个Item的估计大小,一般不需要设置
@property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0); // defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -preferredLayoutAttributesFittingAttributes:
//设置布局方向, UICollectionViewScrollDirectionHorizontal水平布局,UICollectionViewScrollDirectionVertical垂直布局
@property (nonatomic) UICollectionViewScrollDirection scrollDirection; // default is UICollectionViewScrollDirectionVertical
//设置头视图尺寸大小
@property (nonatomic) CGSize headerReferenceSize;
//设置尾视图尺寸大小
@property (nonatomic) CGSize footerReferenceSize;
//设置每个单元的EdgeInset
@property (nonatomic) UIEdgeInsets sectionInset;
// Set these properties to YES to get headers that pin to the top of the screen and footers that pin to the bottom while scrolling (similar to UITableView).
//下面这两个方法设置分区的头视图和尾视图是否始终固定在屏幕上边和下边
@property (nonatomic) BOOL sectionHeadersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
@property (nonatomic) BOOL sectionFootersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);
学习参考:Developer_CYX
UICollectionViewController基础(1)
UICollectionViewController基础(2)引导页
UICollectionViewController基础(3)瀑布流
UICollectionViewController基础(4)自定义