1.关于 collectionView 的个人理解(如果想了解详细,可以去查看官方文档)
1.1.collectionView 是一个比较特殊的控件, 它继承于 scrollView, 拥有了滑动功能,又拥有类似与 tableView 的缓存池属性(方便与循环利用),而它的子控件的布局又不会像 tableView 那样的死板(只能横向布局).
1.2.可以认为 collectionView 的出现就是为了解决图片的滚动,以及循环资源消耗的问题.其出现应该比 tableView 晚.
- 关于 collectionView 的基本使用问题
2.1.上面提到 collectionView 可以自由的设置子控件的布局,没有拘束.那么怎么一个自由法呢,不可能你不设置吧,它可没有那么智能(⊙o⊙)哦.
2.1.1 请看下面的代码.
// 设置布局因素 : 流水布局(比较常用的布局)
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
// 创建 collectionView 初始化时加入布局
UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
// 只是为了验证 控件已经加到 view 上 ()
collectionView.backgroundColor = [UIColor redColor];
[self.view addSubview:collectionView];
2.2. 关于(流水)布局因素的一些属性
// 字面意思是最小的线的空间, 其实是指横向距离(行与行)
@property (nonatomic) CGFloat minimumLineSpacing;
// 竖向距离(列与列)
@property (nonatomic) CGFloat minimumInteritemSpacing;
// 项目的大小,其实就是 每个元素的大小,也就是每个 cell 的大小
@property (nonatomic) CGSize itemSize;
// 估算cell大小
@property (nonatomic) CGSize estimatedItemSize
// 滚动方向
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;
// 头部相关距离
@property (nonatomic) CGSize headerReferenceSize;
// 尾部相关距离
@property (nonatomic) CGSize footerReferenceSize;
// 每一组的内边距
@property (nonatomic) UIEdgeInsets sectionInset;
2.3 关于 collectionView 的内部内容的显示(相似与 tableView 有代理,以及数据源)
// 一般是将 控制器 设置为 数据源, 也就是在控制器中处理各种数据.
collectionView.dataSource = self;
// 关于 cell 的注册
[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:collectionCellID];
// 数据源方法(和 tableView 真的是 一模一样呀)
// 返回每一组的项目数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 20;
}
// 返回每一个 item 的 cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// cell 从缓存池中取, 不能自己创建, 只能通过注册. 自己创建没有重用 ID
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellID forIndexPath:indexPath];
// if (cell == nil) {
// cell = [[UICollectionViewCell alloc]init];
// }
cell.backgroundColor = [UIColor yellowColor];
return cell;
}