gpt4 book ai didi

ios - 如何使用相对于容器调整大小的项目初始化 UICollectionViewController?

转载 作者:行者123 更新时间:2023-11-29 02:30:16 26 4
gpt4 key购买 nike

我正在尝试布局 View 网格。每行应该有 3 个 View 。我试图定义我的 UICollectionViewController的构造函数如下:

- (id)initWithDefaultLayout
{
UICollectionViewFlowLayout* layout = [[UICollectionViewFlowLayout alloc] init];
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
CGFloat dimension = floorf(self.view.frame.size.width / 3.0f);
layout.itemSize = CGSizeMake(dimension, dimension);
layout.minimumInteritemSpacing = 1.0f;
layout.minimumLineSpacing = 1.0f;
return [super initWithCollectionViewLayout:layout];
}

程序在访问 self.view 的线路上崩溃了:

NSException found: UICollectionView must be initialized with a non-nil layout parameter

我认为 loadView 的内部实现发现 UICollectionViewLayout 未设置并抛出异常。

我如何以干净的方式解决这个问题?如果我对项目的宽度进行硬编码,代码将会很脆弱,因为 iOS 屏幕尺寸多种多样。此外,在某些情况下,该 View Controller 会以模态方式呈现(小于屏幕尺寸)。

最佳答案

为什么不覆盖 UICollectionViewDelegateFlowLayout protocol 的 sizeForItemAtIndexPath 方法 - collectionView:layout:sizeForItemAtIndexPath: :

然后你只需提供如下内容:

- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{

CGFloat viewWidth = CGRectGetWidth(self.view.bounds);

int numCellsInRow = 3;

// adjust for the spacing
viewWidth -= ((numCellsInRow+1)*1.0f);

CGFloat dimension = viewWidth/(float)numCellsInRow;


return CGSizeMake(dimension, dimension);
}

关于ios - 如何使用相对于容器调整大小的项目初始化 UICollectionViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26983870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com