单元格uicollectionviewflowlayout之间的相同边距

时间:2017-09-08 09:48:44

标签: ios swift uiviewcontroller uicollectionviewcell uicollectionviewdelegateflowlayout

我一直在搜索谷歌& stackoverflow一段时间试图在我的UICollectionViewCells上完成一个相当简单的操作,但直到现在我还没能做到。

我想要的是CollectionViewController,每行有两个单元格。每个单元格在顶部,左侧,底部和右侧必须具有相同的边距。

到现在为止,我所拥有的是:

enter image description here

问题是我希望在单元格的每一侧都有相同数量的边距。这意味着EdgeInsets左右两者都必须是14而不是7 ..

我无法做到这一点..我知道我错过了一些东西,但我无法弄清楚是什么。

我使用的是FlowLayout,这是UICollectionViewDelegateFlowLayout

的代码
fileprivate let phoneSectionInsets = UIEdgeInsets(top: 14.0, left: 7.0, bottom: 20.0, right: 7.0)

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let phoneHeight = 250
        let fixedWidth = 220

        return CGSize(width: (collectionView.bounds.size.width / 2 - (phoneSectionInsets.left + phoneSectionInsets.right)), height: CGFloat(phoneHeight))

}

func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

    return phoneSectionInsets
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {

    return 14.0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {

    return 14.0
}

如果我将左边和右边的边缘插入设置为14,那么我的右侧和左侧有14个边距,但是在单元格之间我有28个..

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要在sizeforitem中交叉检查您的代码

fileprivate let phoneSectionInsets = UIEdgeInsets(top: 14.0, left: 14.0, bottom: 20.0, right: 14.0)

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let phoneHeight = 250
        let fixedWidth = 220

        return CGSize(width: (collectionView.bounds.size.width -  (phoneSectionInsets.left + phoneSectionInsets.right + 14/*item spacing */))/2.0, height: CGFloat(phoneHeight))

}

在计算项目宽度时,您需要考虑左右边距以及间距之间的项目。

答案 1 :(得分:0)

我在使用此代码的应用程序中做了完全相同的事情:

    let width = (UIScreen.main.bounds.size.width-30)*0.5
    collectionViewFlowLayout.itemSize =  CGSize(width: width, height: UIScreen.main.bounds.size.width * 0.5)
    collectionViewFlowLayout.scrollDirection = .vertical
    collectionViewFlowLayout.sectionInset = UIEdgeInsets(top: 10,left: 10,bottom: 10,right: 10)
    collectionViewFlowLayout.minimumInteritemSpacing = 10
    collectionViewFlowLayout.minimumLineSpacing = 10
  

注意:我已使用委托方法取代了流程布局的出口。

根据需要更改单元格大小。