UICollectionView基础
- UICollectionViewFlowLayout:视图布局对象(流水布局:一行排满,自动排到下行),继承自UICollectionViewLayout。UICollectionViewLayout内有一个collectionView属性,所有的视图布局对象都继承自UICollectionViewLayout。
- 若我们要自定义布局对象,我们一般继承UICollectionViewFlowLayout,然后重写里面的一些方法就可以了。
- 需要实现三个协议;UICollectionViewDataSource(数据源)、UICollectionViewDelegateFlowLayout(视图布局),自定义布局需要实现UICollectionViewDataSource、UICollectionViewDelegate两个协议即可。
一、自定义线性布局
- 首先要继承与流水布局UICollectionViewFlowLayout
#import <UIKit/UIKit.h>
@interface LineCollectionViewLayout : UICollectionViewFlowLayout
@end
#import "LineCollectionViewLayout.h"
@implementation LineCollectionViewLayout
- (instancetype)init{
if (self = [super init]) {
}
return self;
}
/**
* 用来做布局的初始化操作(不建议在init方法中进行布局的初始化操作)
- 注意:一定要调用[super prepareLayout]
*/
- (void)prepareLayout{
[super prepareLayout];
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
CGFloat inset = (self.collectionView.frame.size.width - self.itemSize.width) * 0.5;
self.sectionInset = UIEdgeInsetsMake(0, inset, 0, inset);
}
/**
* 这个方法的返回值是一个数组(数组里面存放着rect范围内所有元素的布局属性)
* 这个数组中存放的都是UICollectionViewLayoutAttributes对象
* 这个方法的返回值决定了rect范围内所有元素的排布(frame)*/
/**
UICollectionViewLayoutAttributes *attrs;
1.一个cell对应一个UICollectionViewLayoutAttributes对象
2.UICollectionViewLayoutAttributes对象决定了cell的frame
*/
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{