UICollectionViewDataSource
,UICollectionViewDelegate
,UICollectionViewDelegateFlowLayout
這三個協議。// 行間距,也能夠經過collectionView: layout:minimumLineSpacingForSectionAtIndex: @property (nonatomic) CGFloat minimumLineSpacing; // 設置cell之間的間距 @property (nonatomic) CGFloat minimumInteritemSpacing; // 定義每個item的大小。經過設定itemSize能夠全局地改變全部cell的尺寸,若是想要對某個cell制定尺寸, //可使用-collectionView:layout:sizeForItemAtIndexPath:方法。 @property (nonatomic) CGSize itemSize; @property (nonatomic) CGSize estimatedItemSize // 滾動方向,默認是水平 // UICollectionViewScrollDirectionVertical // UICollectionViewScrollDirectionHorizontal @property (nonatomic) UICollectionViewScrollDirection scrollDirection; // 根據滾動方向不一樣,header和footer的高和寬中只有一個會起做用。 // 垂直滾動時section間寬度爲該尺寸的高,而水平滾動時爲寬度起做用, @property (nonatomic) CGSize headerReferenceSize; @property (nonatomic) CGSize footerReferenceSize; // 組間距 縮進 @property (nonatomic) UIEdgeInsets sectionInset;
// 設定指定Cell的尺寸 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath; // 設定collectionView(指定區)的邊距 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section; // 設定指定區內Cell的最小行距,也能夠直接設置UICollectionViewFlowLayout的minimumLineSpacing屬性 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section // 設定指定區內Cell的最小間距,也能夠直接設置UICollectionViewFlowLayout的minimumInteritemSpacing屬性 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
// 邊框 @property (nonatomic) CGRect frame // 中心點 @property (nonatomic) CGPoint center // 大小 @property (nonatomic) CGSize size // 形狀 @property (nonatomic) CATransform3D transform3D // 透明度 @property (nonatomic) CGFloat alpha // 層次關係 @property (nonatomic) NSInteger zIndex // 是否隱藏 @property (nonatomic, getter=isHidden) BOOL hidden
// 返回collectionView的內容的尺寸 -(CGSize)collectionViewContentSize // 返回rect中的全部的元素的佈局屬性 /* 返回的是包含UICollectionViewLayoutAttributes的NSArray UICollectionViewLayoutAttributes能夠是cell,追加視圖或裝飾 視圖的信息,經過不一樣的UICollectionViewLayoutAttributes初始 化方法能夠獲得不一樣類型的UICollectionViewLayoutAttributes: */ -(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 // 當邊界發生改變時,是否應該刷新佈局。若是YES則在邊界變化(通常是scroll到其餘地方)時,將從新計算須要的佈局信息。 -(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
另外須要瞭解的是,在初始化一個UICollectionViewLayout實例後,會有一系列準備方法被自動調用,以保證layout實例的正確。佈局
// 當指定indexPath處的item被選擇時觸發 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath //返回這個UICollectionView是否能夠被選擇 -(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath; // 下面是三個和高亮有關的方法: - (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath /* 事件的處理順序以下: 1.手指按下 2.shouldHighlightItemAtIndexPath (若是返回YES則向下執行,不然執行到這裏爲止) 3.didHighlightItemAtIndexPath (高亮) 4.手指鬆開 5.didUnhighlightItemAtIndexPath (取消高亮) 6.shouldSelectItemAtIndexPath (若是返回YES則向下執行,不然執行到這裏爲止) 7.didSelectItemAtIndexPath (執行選擇事件) */