有关UICollectionviewController的一些问题

一般我们使用UICollectionView 会直接使用UICollectionview,初始化传入一个flowLayout(可以是UICollectionviewFlowLayout ,也可以是自定义布局)

 UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
     
 UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
如果你在自定义使用自定义的UICollectionviewController 。用来做引导页,做collection view的转场动画,等等。

你在viewDidLoad中按往常的写法,使用自定义的布局来初始化uicollectionview。会报错:错误信息UICollectionView must be initialized with a non-nil layout parameter'

意思明显是需要一个layout对象来初始化,但是在viewdidload 中有使用自定义的布局了 

    WaterFlowLayout *flowLayout = [[WaterFlowLayout alloc] init];

    flowLayout.delegate = self;

    collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:flowLayout];

    collection.backgroundColor = [UIColor whiteColor];

    collection.delegate=self;

    collection.dataSource=self;

    [collection registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

    [self.view addSubview: self.collectionView];

其实在自定义的UICollectionviewController中 初始化就需要传入一个 layout 参数。。

当我们使用[[UICollectionViewController alloc] init];初始化操作时 就需要带入自定义的flow layout 

可以在自定义的.m 中重写init方法,类似

- (instancetype)init

{

    WaterFlowLayout *flowLayout = [[WaterFlowLayout alloc] init];

    flowLayout.delegate = self;

    return [super initWithCollectionViewLayout:flowLayout];

}

这样创建就可以带上自带的布局样式了,此外 需要将self.collectionview 设置为当前显示的collection view。

要设置 `UICollectionViewController` 的高度,你可以通过以下几种方法之一: 1. 使用自动布局约束:将 `UICollectionViewController` 添加到一个容器视图中,并使用自动布局约束来设置容器视图的高度。这样,`UICollectionViewController` 的高度将会自动根据容器视图的约束而确定。 2. 手动计算高度:如果你希望手动计算 `UICollectionViewController` 的高度,可以在它的父视图控制器中重写 `viewDidLayoutSubviews` 方法,并在该方法中计算并设置 `UICollectionViewController` 的高度。 ```swift override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // 计算内容的高度 let contentHeight = // 根据你的需求计算内容高度 // 设置 UICollectionViewController 的高度 collectionView.frame = CGRect(x: 0, y: 0, width: collectionView.frame.width, height: contentHeight) } ``` 3. 使用自定义布局:如果你使用自定义的 `UICollectionViewLayout` 来布局 `UICollectionViewController`,你可以在布局类中重写 `collectionViewContentSize` 方法来返回正确的内容尺寸。这样,`UICollectionViewController` 的高度将会根据布局类返回的内容尺寸来确定。 ```swift class CustomLayout: UICollectionViewLayout { // ... override var collectionViewContentSize: CGSize { // 根据你的需求计算内容尺寸 let contentSize = // 计算内容尺寸的逻辑 return contentSize } // ... } ``` 以上是几种常见的设置 `UICollectionViewController` 高度的方法,你可以根据你的具体需求选择适合的方法来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值