• 使用uicollectionView时需要注意的问题


    1.UICollectionView使用流水布局——UICollectionViewFlowLayout时,需要满足条件:

    每个item(即cell)的大小是一样的,不仅是宽度,还有高度。这样,当collectionview的宽度发生变化时,item能将其动态填充。
    itemSize即为每个cell的尺寸。

    collectionview初始化时必须设置一个非空的layout。所以若想使用类似

    UICollectionViewController *ctrl = [[UICollectionViewController alloc]init];

    来初始化一个collectionviewcontroller,那么就需要重写它的init方法

    -(id)init{
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
        layout.itemSize = CGSizeMake(100,100);
        if(self = [super initWithCollectionViewLayout:layout]){
            //这里不用写内容
        }
        return self;
    }

    设置item之间的间距时,可以用以下,并且只适合UICollectionViewFlowLayout

    //垂直方向间距
    layout.minimumLineSpacing = 0;
    //水平方向间距
    layout.minimumInteritemSpacing = 0;

     

    2.collectionview中的布局方法

    - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{
    
    }

    中返回值是一个数组,存放的是rect范围内所有cell的布局属性,即frame。
    其中,rect是一个矩形框,它表示的是collectionview的大小位置。即定义了collectionview的大小,那么rect也是返回的该区域内的cell布局。如:

    @interface LineLayout(){
        UIView *_view;
    }
    
    -(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{
        //取出父类算出的布局属性
        NSArray *attsArray = [super layoutAttributesForElementsInRect:rect];
        
        if (!_view) {
            UIView *view = [[UIView alloc]initWithFrame:rect];
            view.backgroundColor = [UIColor orangeColor];
            _view = view;
            [self.collectionView addSubview:view];
        }
        return attsArray;
    }

    而collectionview的定义为

    _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth, 300) collectionViewLayout:circle];

    效果为:

    当collectionview这样设置时

    _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth/2, 300) collectionViewLayout:circle];

    效果为

     

    3.在初次使用Masonry时,若报类似

    Demo-collectionviewExample[4443:172886] *** Assertion failure in -[MASViewConstraint install], /Users/Suning/Desktop/study/Demo-collectionviewExample/Pods/Masonry/Masonry/MASViewConstraint.m:345

    错误,原因在于
    使用Masonry为自定义view添加约束时,得先把自定义view添加到父视图上。

    上图就是错误用法,将两个位置调换下即可。

  • 相关阅读:
    合代码、merge代码
    springboot 获取项目版本
    软考复习思路之疫情来的太突然之备战明年软考中级之软件设计师
    供应链管理笔记 概述2
    供应链管理笔记
    供应链管理 流程与实施1
    Winform中内嵌显示Office
    数据库提交数据注意事项
    工业互联网
    C#利用using System.Net实现Json数据提交WebAPI
  • 原文地址:https://www.cnblogs.com/Apologize/p/5328010.html
Copyright © 2020-2023  润新知