gpt4 book ai didi

ios - 如何使 UICollectionViewFlowLayout itemSize 动态显示屏幕大小

转载 作者:技术小花猫 更新时间:2023-10-29 10:23:26 25 4
gpt4 key购买 nike

我正在以编程方式工作(没有 Storyboard ),并且无法针对不同的屏幕尺寸动态设置 layout.itemSize。我收到此错误消息:

"UICollectionView must be initialised with a non-nil layout parameter"

在我的实现文件中使用以下代码:

- (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]);
}

如果我为 layout.itemSize 使用“100,100”,我不会收到错误消息。有没有办法让它变得动态?

我是 Objective-C 的新手,如果对我做错的事情有任何帮助,我将不胜感激。

最佳答案

需要使用流委托(delegate)方式:

- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize cellSize = CGSizeMake(width, height);

return cellSize;
}

您可以根据需要指定宽度和高度浮点值。

例如,假设您的 CollectionView 是垂直的,并且您想要一个短的标题 View 、一个大的中间 View 和一个小的页脚 View ,那么您可以这样做:

- (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;
}

关于ios - 如何使 UICollectionViewFlowLayout itemSize 动态显示屏幕大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901286/

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