如何使屏幕大小的UICollectionViewFlowLayout itemSize动态化

时间:2014-11-13 04:21:00

标签: ios objective-c uicollectionview

我正在以编程方式工作(没有故事板),并且无法为不同的屏幕尺寸制作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的新手所以非常感谢我对错误做的任何帮助。

2 个答案:

答案 0 :(得分:17)

需要使用flow delegate方法:

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

答案 1 :(得分:1)

将以下委托方法添加到您的集合视图

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
 {
UIImage *image;
long row = [indexPath row];

image = [UIImage imageNamed:_carImages[row]];

return image.size;
 }

这是一个帮助您enter link description here

的链接