天天看點

iOS UICollectionView簡介 —— HERO部落格

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

繼續閱讀