我正在以编程方式工作(没有情节提要),并且在为不同的屏幕尺寸使layout.itemSize动态化时遇到困难。我收到此错误消息:
“UICollectionView 必须使用非零布局参数初始化”
在我的实现文件中使用以下代码:
- (instancetype)init
{
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
CGSize size = self.collectionView.bounds.size;
layout.itemSize = CGSizeMake(size.width, size.height);
[layout setScrollDirection:UICollectionViewScrollDirectionVertical];
layout.minimumLineSpacing = 100.0;
layout.headerReferenceSize = CGSizeMake(0.0, 50.0);
return (self = [super initWithCollectionViewLayout:layout]);
}
例如,如果我使用“100,100”,我不会收到错误消息layout.itemSize
。有没有办法让它动态化呢?
我是 Objective-C 的新手,所以希望能对我的错误行为提供帮助。
需要使用流委托方法:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize cellSize = CGSizeMake(width, height);
return cellSize;
}
您可以将宽度和高度浮点值指定为您想要的任何值。
例如,假设您的 CollectionView 是垂直的,并且您想要一个短标题视图、一个大中间视图和一个小页脚视图,那么您可以执行以下操作:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize cellSize;
cellSize.width = self.view.bounds.size.width;
if(indexPath.row == 0)
{
// header view height
cellSize.height = 100;
}
else if(indexPath.row == 1)
{
// body view height
cellSize.height = 500;
}
else
{
// assuming number of items is 3, then footer view is last view
// footer view height
cellSize.height = 100;
}
return cellSize;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)