美文网首页iOS界面整理
iOS UICollectionView的常用回调方法详细解释

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

作者: 恋空K | 来源:发表于2019-12-13 14:18 被阅读0次

    //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垂直滚动时,把手机横屏来滚动

    - (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的常用回调方法详细解释

        本文链接:https://www.haomeiwen.com/subject/nyyfnctx.html