Ios 如何更改集合视图单元格大小并添加填充?

Ios 如何更改集合视图单元格大小并添加填充?,ios,swift,uiviewcontroller,uicollectionview,uicollectionviewcell,Ios,Swift,Uiviewcontroller,Uicollectionview,Uicollectionviewcell,我试图让我的collectionView单元看起来像下面的图片,但一直没能做到。我尝试使用collectionViewLayout,但无法获得正确的大小和适当的填充。我怎样才能做到这一点 这是我的密码 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) ->

我试图让我的collectionView单元看起来像下面的图片,但一直没能做到。我尝试使用collectionViewLayout,但无法获得正确的大小和适当的填充。我怎样才能做到这一点

这是我的密码

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            let frameSize = collectionView.frame.size
            return CGSize(width: frameSize.width, height: frameSize.height / 2)

    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 0, left: 27, bottom: 0, right: 27)
    }
}
这是一张我正在努力实现的图片。谢谢


实现
UICollectionViewFlowLayout
的以下方法

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

    public func collectionView(_ collectionView: UICollectionView,
                               layout collectionViewLayout: UICollectionViewLayout,
                               minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 10
    }
对于27px的嵌入式使用

yourcollectionView.sectionInset = UIEdgeInsets(top: 10, left: 27, bottom: 10, right: 27)
要使用实现此协议的类,必须设置集合视图的委托属性

yourcollectionView.delegate = /* object which implement flow layout delegate */
uicollectionViewDelegate
自动符合
UICollectionViewFlowLayoutDelegate
,设置委托就足够了

计算单元格大小时,您遗漏了另一项内容。您的单元格大小计算错误。具体实施如下

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            let frameSize = collectionView.frame.size
            let size = (frameSize.width - 64.0) / 2.0 // 27 px on both side, and within, there is 10 px gap.
            return CGSize(width: size, height: size)

    }
如果您使用序列图像板设置UI小部件的布局,也可以在序列图像板中设置它们


但是边路的27分呢?同样的事情为什么要写两遍呢?在回答的第一部分,你写了两遍public func collectionView(collectionView:UICollectionView,layout collectionViewLayout:UICollectionViewLayout,MinimumItemSpacingForSection:Int)->CGFloat{return 10}-这是为什么?如果你仔细看,两个函数只有一个不同,第一个是
minimuminetemspaccingforsectionat
,第二个是
minimumlinespaccingforsectionat
。你的单元格大小计算也错了,我已经更新了答案,请看一看。我需要单元格的宽度为157。当我更改你的数学时o这个(375-61)/2=157所有的东西都在一行上,而不是每行两个单元格。你知道为什么吗?