如何使用 UICollectionView 创建 3 列

Posted

技术标签:

【中文标题】如何使用 UICollectionView 创建 3 列【英文标题】:How can I create 3 columns using UICollectionView 【发布时间】:2014-11-27 06:06:00 【问题描述】:

我想用 UICollectionView 创建一个 3 列,这是我所做的代码: 我已将 UICollectionViewFlowLayout 附加到我的 UICollectionView 并将 itemSize 设置为集合视图的宽度除以 3:

    self.collectionView.backgroundColor =  [UIColor blueColor];

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];

    double width = self.collectionView.frame.size.width;
    width /= 3;
    [flowLayout setItemSize:CGSizeMake(width, 100)];
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

    [self.collectionView setCollectionViewLayout:flowLayout];

但是当我运行它时,我每行只看到 1 个项目,但项目的宽度设置正确。 item的右边是一堆空格。

你能告诉我我错过了什么吗?

谢谢。

更新:

我已经尝试过设置最小间距。但这仍然行不通。我只看到 1 列单元格:

self.collectionView.backgroundColor =  [UIColor blueColor];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];

[flowLayout setItemSize:CGSizeMake(160, 160)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
flowLayout.minimumInteritemSpacing = 10.0f;
flowLayout.minimumLineSpacing = 10.0f;

[self.collectionView setCollectionViewLayout:flowLayout];

当我在代码中调整间距值时,我看到屏幕上的间距发生了变化。只是它只将单元格布置在 1 列中。而不是 2

【问题讨论】:

如果你记录宽度,它会给你什么? 两个 UICollectionViewCell 之间应该有空格。例如:如果 UICollectionView 宽度为 320 像素,并且您希望两个单元格之间有 10px 的间隙,那么您应该将单元格的宽度固定为 320-40=280/ 3 像素(假设一行中有 3 个单元格)。我假设您的第一个单元格将从集合视图内的 10 像素开始。 设置minimumInterItemSpacing @johnykumar,确实他的数学是关闭的(除非他根本没有空格),但如果他使用默认间距(10),那并不能解释为什么他只看到一个单元格;他至少应该看到 2 个。 【参考方案1】:

在创建UICollectionViewLayout 时,您应该指定itemSizeminimumInterItemSpacingminimumLineSpacing,并可以选择使用此信息的集合视图布局其项目的滚动方向。

【讨论】:

【参考方案2】:

实现<UICollectionViewDelegateFlowLayout>协议,使用这个你可以做到

collectionView:layout:insetForSectionAtIndex:
collectionView:layout:minimumInteritemSpacingForSectionAtIndex:
collectionView:layout:minimumLineSpacingForSectionAtIndex:
collectionView:layout:referenceSizeForFooterInSection:
collectionView:layout:referenceSizeForHeaderInSection:
collectionView:layout:sizeForItemAtIndexPath:

参考这个How do I create a UICollectionView with column and row headers?

【讨论】:

【参考方案3】:

您的集合视图的尾随空间布局约束可能未正确设置为水平扩展。

换句话说,集合视图试图水平平铺项目,但右侧没有任何空间来放置其他项目,因此它会换行到下一行。

【讨论】:

以上是关于如何使用 UICollectionView 创建 3 列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UICollectionView 在 Pages 中重新创建重命名动画?

如何使用 2 个或更多自定义单元格创建自定义 UICollectionView?

如何使用 UICollectionView 创建此 UI,以便内容不受单元格边界的限制

如何使用 UICollectionView 在单元格左侧创建部分以及标题?

如何以编程方式快速创建 uicollectionview(没有情节提要)

如何让 UICollectionView 连续水平滚动而不是创建第二行?