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



在我的实现文件中包含以下代码:

- (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/

10-11 14:54