【问题标题】:Same margin between cell uicollectionviewflowlayout单元格 uicollectionviewflowlayout 之间的边距相同
【发布时间】:2017-09-08 09:48:44
【问题描述】:

我在 google 和 stackoverflow 上搜索了一段时间,试图在我的 UICollectionViewCells 上完成一个相当简单的操作,但直到现在我都无法做到。

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

到目前为止,我拥有的是:

问题是我希望在单元格的每一侧都有相同数量的边距。这意味着EdgeInsets left 和 right 都必须是 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..

非常感谢您的帮助。

【问题讨论】:

标签: ios swift uiviewcontroller uicollectionviewcell uicollectionviewdelegateflowlayout


【解决方案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))

}

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

【讨论】:

    【解决方案2】:

    我在我的应用程序中使用这段代码做同样的事情:

        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
    

    注意:我采用了流布局的出路,而不是使用委托方法。

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

    【讨论】:

    • 我还没有尝试过你的解决方案,但我认为它会起作用。我将上述答案标记为正确,因为它是对我的实现的修复(并且有效)。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多