【问题标题】:UICollectionView using sections leaves a gap between cells使用部分的 UICollectionView 在单元格之间留下间隙
【发布时间】:2013-01-28 19:53:45
【问题描述】:

我正在使用 UICollectionView 来显示多个数据部分。这些部分具有固定数量的项目。我希望所有项目都显示在一个连续的网格中。

现在我在水平方向上完成了这个:

但在垂直方面,这留下了很大的差距:

我想解决部分之间的这种差距,因为它很丑而且不属于那里。 我很乐意使用自定义 FlowLayout,但我找不到一个指导我正确方向的教程(我找到了几个,但没有一个真正涉及到这个问题。)

谁能帮我解决这个问题,或者至少给我指出正确的方向?

P.S:我已经实现了部分,因为我正在动态加载数据。目前我无法选择使用 1 部分。

更新 根据要求,我正在添加用于我当前 FlowLayout 的值。我在全屏(减去 UINavigationBar)UICollectionView 上使用标准的水平流布局,每个部分有 21 个项目。

  • 滚动方向:水平
  • 像元大小:248、196
  • 页眉/页脚大小:无
  • 单元格的最小间距:10
  • 行的最小间距:10
  • 部分插图:20、20、10、10

【问题讨论】:

  • 编辑您的帖子以包含您在流程布局上设置的所有尺寸参数,以便我们尝试重现问题。
  • 问题不在于差距。问题是每个部分中的项目数量。你有四行。如果该部分的项目数不是四的倍数,则它无法显示完整的部分,因此在移动到下一个部分之前会留下一个空白。几乎就像您想要“内联”部分一样?
  • 嗯..fogmeister 并没有真正给我我正在寻找的解决方案(我仍然想知道如何用一节中的 21 个项目来解决这个问题),但他确实触发了我尝试乘以 4(和 3,以支持横向),如果我在一个部分中使用 24 个项目,结果证明间隙问题已解决.. 有趣!谢谢!

标签: ios uicollectionview uicollectionviewlayout


【解决方案1】:

这样使用

解决Gap问题

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

layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 2;

【讨论】:

  • 他说的是节的间隙,而不是节之间的间距。
【解决方案2】:

要消除这些差距,您需要创建自定义布局,该布局将用作您的集合视图的布局。这个类将是 UICollectionViewFlowLayout 的子类。

然后您可以覆盖以下两种方法,并可以根据需要创建自己的自定义布局。

  - (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
  - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)path

UICollectionViewLayoutAttributes 是处理单元格位置、框架、Zindex 等的类

您还可以使用以下属性。

 collectionView:layout:minimumInteritemSpacingForSectionAtIndex:
 collectionView:layout:minimumLineSpacingForSectionAtIndex:

【讨论】: