UICollectionView簡介:
UICollectionView是iOS6引進的API,繼承UIScrollView,可以自定義布局展示集合視圖,布局靈活,可以多列布局。
UICollectionView屬性:
UICollectionViewDataSource、UICollectionViewDelegate、UICollectionViewDelegateFlowLayout:代理協定
cell:展示的内容,可複用,在viewDidLoad方法中注冊
supplementary view:追加視圖,可複用,在viewDidLoad方法中注冊
decoration view:背景視圖
itemSize:全局cell尺寸,單獨定義用代理方法
minimumLineSpacing:全局行間距
minimumInteritemSpacing:全局cell間距
scrollDirection:滾動方向
headerReferenceSize:全局頁眉尺寸
footerReferenceSize:全局頁腳尺寸
sectionInset:全局區内邊距
UICollectionView使用:
//建立布局
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
//滾動方向
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
//組間距
flowLayout1.sectionInset =UIEdgeInsetsMake( , , , );
//注冊cell
- (void)registerClass:(nullable Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier
- (void)registerNib:(nullable UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier
//注冊supplementary view
- (void)registerClass:(nullable Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier
- (void)registerNib:(nullableUINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier
//建立cell
- (__kindofUICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
//建立supplementary view
- (__kindofUICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath
#pragma mark <UICollectionViewDataSource>
//組數
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
//cell個數
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
//cell内容
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
//collectView大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
//cell的最小行間距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
//collectView的margin
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
//cell的最小列間距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
//設定頂部的大小
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
//追加視圖
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
//點選方法
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
//是否可以被選擇
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewLayout簡介:
UICollectionViewLayout為UICollectionView提供布局資訊,根據需求,我們通常需要自定義一個繼承UICollectionViewLayout的類,重載它的方法,達到我們需要的布局。
UICollectionViewLayout重載方法:
//當邊界發生改變時,是否應該重新整理布局,傳回YES表示重新整理。
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
//collectionView内容的尺寸
-(CGSize)collectionViewContentSize
//rect中的所有的元素的布局屬性(cell、追加視圖、裝飾視圖)
-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
//布局對應indexPath位置的cell屬性
-(UICollectionViewLayoutAttributes )layoutAttributesForItemAtIndexPath:(NSIndexPath )indexPath
//布局對應indexPath位置的追加視圖屬性
-(UICollectionViewLayoutAttributes )layoutAttributesForSupplementaryViewOfKind:(NSString )kind atIndexPath:(NSIndexPath *)indexPath
//布局對應indexPath位置的裝飾視圖屬性
-(UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind:(NSString)decorationViewKind atIndexPath:(NSIndexPath )indexPath