动态调整 UICollectionView 大小以确保没有项目间距

Posted

技术标签:

【中文标题】动态调整 UICollectionView 大小以确保没有项目间距【英文标题】:Adjust UICollectionView Size Dynamically to Ensure No Inter Item Spacing 【发布时间】:2015-10-17 01:56:51 【问题描述】:

目标是让 UICollectionView 每行具有特定数量的列,而不管屏幕大小。

目前我正在使用:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize

    //print(collectionView.frame.size.width)
    let numberRows:CGFloat = 7
    return CGSize(width: collectionView.frame.size.width/numberRows, height: collectionView.frame.size.width/numberRows)

设置单元格的大小,以便它们可以容纳在集合视图中而没有项目间距。但是,集合视图的大小是根据屏幕大小的百分比设置的。如果所需的“numberRows”不均分,则单元格之间会有间距。

如何动态更改集合视图的大小以确保单元格适合而没有间距?如何以更有效的方式实现这一点?

【问题讨论】:

您解决了这个问题吗?我遇到了同样的问题,还没有找到答案。 【参考方案1】:

当您设置集合视图的大小时,您可以将其向下舍入为 numberRows 的倍数。这确保了它会平均分配。

如果您使用 AutoLayout,您可以设置集合视图的宽度或高度约束。然后拨打layoutSubviews:setNeedsLayout

如果您不使用 AutoLayout,您可以使用 setFramesetBounds 更改集合视图的大小。

【讨论】:

【参考方案2】:

你不能在这里打破数学规则。如果你得到一个点/像素太多,你不能把这个像素分成两个半像素。

你可以做的是:

相应地调整集合视图的大小,使单元格的数量完美匹配

接受其中一个单元的大小比其他单元大/小一个像素。 (例如行中的最后一个单元格)

【讨论】:

以上是关于动态调整 UICollectionView 大小以确保没有项目间距的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UICollectionView 中动态调整标题视图的大小?

在非滚动 UICollectionView 中动态调整 UICollectionViewCell 的大小

自动调整UICollectionView高度以调整其内容大小

调整 UICollectionViewCells 的大小以始终填充 UICollectionView

为 SizeToFit 标签调整 UICollectionView 单元的大小

如何调整 UICollectionView 单元格的大小以适合其中的内容?