集合视图间距打破 ui

Collection view spacing breaks the ui

我正在尝试创建如下所示的 UI。

为此,我使用了 UICollectionViewFlowLayout

为了将第一个单元格显示为全宽并将剩余单元格显示为 3 列,我已经实现了 sizeForItemAtIndexPath:minimumInteritemSpacingForSectionAtIndex 方法:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
    var cellSize = CGSizeZero

    if indexPath.item == 0
    {
        let width  = self.cvMedia.frame.width - 20
        let height = (width * 9)/16
        cellSize   = CGSize(width: width, height: height)
    }
    else
    {
        let width  = self.cvMedia.frame.width / 3 - 20
        let height = (width * 16)/9
        cellSize   = CGSize(width: width, height: height)
    }

    return cellSize
}



func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat
{
    return 20.0
}

但我在 iPhone 6SPlus 和 iPhone 6Plus 中得到以下输出:

我尝试将项目间距从 20 更改为 19,它在模拟器上工作,但在实际设备上它仍然显示相同的行为。如果我更改间距值,我会在某些设备版本上获得正确的输出,而在某些版本上无法正常工作。我可以添加一个设备版本检查,并基于它我可以 return 该值。但这不是一个优雅的解决方案,它将在未来的版本中中断。谁能帮我解决这个问题?提前致谢。

查看此 并将单元格和行的最小间距值更改为 0

制作此布局时应使用集合视图的宽度作为参数。

例如,

  1. 您需要 3 个单元格才能适合视图。
  2. 单元格之间必须有 20pt 的间距。

解法:

在运行时通过 viewWillAppear() 或 cellForRowAtIndexPath() 计算单元格的大小

场景:

设备宽度为 320pt。 Collectionview 的宽度为 300pt(间距 10pt L 和 R)间距:单元格之间的间距为 20pt。细胞需要 3!! 单元格大小:?

现在..开始用任一方法计算。

单元格间距 = (3-1) * 20 = 2 * 20 = 40pt

剩余集合视图宽度 = 300pt - 40pt = 260pt

像元大小 = 260pt/3 = 86.667 pt。 (约 86 磅)。

代码中:

cellWidth = ( collectionView?.bounds.width - minimumSpacing * (numberOfCellsInARow - 1 ) ) / numberOfCellsInARow

此外,这只给出了单元格宽度。您还需要 cellHeight。 您可能已经有了单元格的纵横比。使用它,也可以计算 cellHeight。

亲切的问候,
苏曼·阿迪卡里