iOS UICollectionView的常用回调方法详细解释

//collectionView有多少个分组section

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

    return3;

}

//每个section里面有多少个cell

//不判断section,就是每个section返回的cell个数一样

- (NSInteger)collectionView:(UICollectionView*)collectionViewnumberOfItemsInSection:(NSInteger)section {

    return5;

}

/返回具体某一个section里面的某一个item对应的cell

//不判断indexPath,就是返回相同的cell

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class]) forIndexPath:indexPath];

    if(indexPath.section==0) {

        cell.backgroundColor = [UIColor redColor];

    }elseif(indexPath.section==1) {

        cell.backgroundColor = [UIColor grayColor];

    }else{

        cell.backgroundColor = [UIColor yellowColor];

    }

    returncell;

}

//返回具体某一个section里面的某一个item对应的cell的size

//不判断indexPath,就是每个cell的大小一样

- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutsizeForItemAtIndexPath:(NSIndexPath*)indexPath {

    if(indexPath.section==0) {

        return CGSizeMake((self.view.bounds.size.width - 80)/3, 100);

    }elseif(indexPath.section==1) {

       return CGSizeMake((self.view.bounds.size.width - 20)/3, 100);

    }else{

       return CGSizeMake((self.view.bounds.size.width - 150)/3, 100);

    }

}

//代表某一个section里面,各个cell之间上下之间的间距

//不判断section,就是每个section里面各个cell之间上下之间的间距(补充:如果UICollectionView水平滚动,minimumLineSpacing 代表的就是每个section里面各个cell之间左右之间的间距一样)

- (CGFloat)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutminimumLineSpacingForSectionAtIndex:(NSInteger)section {

    if(section ==0) {

        return10;

    }elseif(section ==1) {

        return20;

    }else{

        return80;

    }

//    return 50;

//代表某一个section里面,各个cell之间左右之间的间距(cell宽度的计算,是跟这个间距有关的,不然会出现显示不正常问题)(补充:如果UICollectionView水平滚动,minimumInteritemSpacing ,代表的就是每个section里面各个cell之间上下之间的间距)

//不判断section,就是每个section里面各个cell之间左右之间的间距一样

- (CGFloat)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutminimumInteritemSpacingForSectionAtIndex:(NSInteger)section {

    if(section ==0) {

        return0;

    }elseif(section ==1) {

        return10;

    }else{

        return50;

    }

//    return 50;

}

//某一个section距离屏幕左右两侧的间距,以及距离自身(section)的头部试图(Header)、尾部试图(Footer)的间距

//return UIEdgeInsetsMake(该section距离头部试图的间距, 该section距离collectionView左边的间距, 该section距离尾部试图的间距, 该section距离collectionView右边的间距);

//不判断section就是每个section的UIEdgeInsetsMake一样

//这里可以把section看成是一个view。view里面放了很多cell (如图--01所示)

补充:要是collectionView是横向滚动,return UIEdgeInsetsMake(该section距离collectionView顶部的间距, 该section距离头部试图的间距, 该section距离collectionView底部的间距, 该section距离尾部试图的间距)  也就是说collectionView横向滚动的时候,可以把手机横(旋转90度)着看竖直滚动的collectionView,

补充:当scrollDirection是UICollectionViewScrollDirectionHorizontal,也就是水平滚动UICollectionView的时候,minimumLineSpacing 此时代表的是cell左右的间距。其实很好理解,UICollectionView水平滚动的时候,相当于UICollectionView垂直滚动时,把手机横屏来滚动

补充:flowlayout.minimumInteritemSpacing = BXLPixel(2);        flowlayout.sectionInset=UIEdgeInsetsMake(BXLPixel(24),BXLPixel(80),BXLPixel(8),BXLPixel(2));

此时collectionView优先满足sectionInset右边的BXLPixel(2)),在满足minimumInteritemSpacing等于BXLPixel(2)。

- (UIEdgeInsets)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutinsetForSectionAtIndex:(NSInteger)section {

    if(section ==0) {

        returnUIEdgeInsetsMake(0,20,0,20);

    }elseif(section ==1) {

        returnUIEdgeInsetsMake(10,0,10,0);

    }else{

        returnUIEdgeInsetsMake(5,0,5,0);

    }

}

图--01

//返回某一个indexPath对应的头部试图or尾部试图(不判断indexPath,就是每个section的头部试图返回一样的)

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {

    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {

         UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath];

                   headerView.backgroundColor= [UIColorgreenColor];

                   returnheaderView;    

}

    if ([kind isEqualToString:UICollectionElementKindSectionFooter]) {

        UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath];

        headerView.backgroundColor = [UIColor orangeColor];

        returnheaderView;

    }

    return nil;

}

//返回某一个indexPath对应的头部试图的size(不判断section,就是每个section的头部试图大小一致)

- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutreferenceSizeForHeaderInSection:(NSInteger)section {

    return CGSizeMake(self.view.bounds.size.width, 20);

}

//返回某一个indexPath对应的尾部试图的size(不判断section,就是每个section的尾部试图大小一致)

- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutreferenceSizeForFooterInSection:(NSInteger)section {

    return CGSizeMake(self.view.bounds.size.width, 20);

}

你可能感兴趣的:(iOS UICollectionView的常用回调方法详细解释)