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

前端之家收集整理的这篇文章主要介绍了ios – 如何使UICollectionViewFlowLayout itemSize动态显示屏幕大小前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以编程方式工作(没有故事板),并且无法使layout.itemSize动态化为不同的屏幕尺寸.我收到这个错误消息:

“UICollectionView must be initialised with a non-nil layout parameter”

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

@H_404_8@- (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的新手,所以我会很乐意为我做错事而提供任何帮助.

解决方法

需要使用流代理方法: @H_404_8@- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize cellSize = CGSizeMake(width,height); return cellSize; }

您可以指定任何所需的宽度和高度浮点值.

例如,让我们说你的CollectionView是垂直的,你想要一个简短的标题视图,一个大的中间视图和一个小的页脚视图,那么你可以做一些像:

@H_404_8@- (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相关文章