集合视图间距打破了ui

时间:2016-07-18 08:44:59

标签: ios uicollectionview uicollectionviewcell uicollectionviewlayout

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

3 Column Layout

为此目的,我正在使用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中获得了以下输出:

Actual Outcome

我尝试将项目间距从20更改为19并且它在模拟器上工作,但在实际设备上它仍然显示相同的行为。如果我更改间距值,我会在某些设备版本上获得正确的输出,而不是在某些版本上工作。我可以添加设备版本检查,并根据我可以返回值。但它不是一个优雅的解决方案,它将在未来的版本中打破。任何人都可以帮我解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

在进行此布局时,您应该使用集合视图的宽度作为参数。

例如

  1. 您需要3个单元格才能适合视图。
  2. 细胞之间必须有20pt的间距。
  3. <强>解决方案:

    在viewWillAppear()或cellForRowAtIndexPath()

    上计算运行时单元格的大小

    <强>情境:

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

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

    细胞间距=(3-1)* 20 = 2 * 20 = 40pt

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

    细胞大小= 260pt / 3 = 86.667 pt。 (86pt apprx)。

    代码:

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

    另外,这只给出了cellWidth。你也需要cellHeight。 您可能已经拥有该单元格的宽高比。使用它,也可以计算cellHeight。

    亲切的问候,
    Suman Adhikari

答案 1 :(得分:0)

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