当我将minSpace设置为0 CollectionView单元格时仍然有空间

时间:2017-09-18 05:41:04

标签: ios swift collectionview

我现在有一个collectionView,每行有4个单元格。

我设置了如下所示的布局

let width = UIScreen.main.bounds.width / 4

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        layout.itemSize = CGSize(width: width, height: width)
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0
        self.module_CollectionView.collectionViewLayout = layout

应该给我一个collectionView,单元格之间没有任何间距。

但是,我仍然在列之间的空间非常薄(看起来像1px)。

(请参阅下面的截图)

如果单元格宽度是屏幕宽度的1/5或1/3,则可以正常工作。

我猜是因为剩下的还是什么?

如果有人能够指出可能出现的问题会很好。

感谢。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为您可能会设置错误的约束,否则您的代码中没有任何错误。

现在,首先在UIView中选择一个collectionviewcell,然后将其设置为四个约束 - top.leading,trailing,bottom并保持0

然后在该视图中添加所有内容(您的视图或图像或按钮)并给出适当的约束。

答案 1 :(得分:0)

您需要实施collectionView(_ collectionView: UICollectionView, layout collectionViewLayout:UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

在您的情况下,屏幕宽度为375,您希望将其分为4部分。如果您直接将375划分为4部分,则会获得带有小数的93.75。 你应该将它(十进制)舍入为94 + 94 + 94 + 93 = 375而不是93.75+93.75+93.75+93.75 = 375的整数。

例如:

override func viewDidLoad() {
        super.viewDidLoad()
        let screenWidth:Int = UIScreen.main.bounds.width
        let parts:CGFloat = 4
        var rounding:Int = 0

        if(screenWidth.truncatingRemainder(dividingBy: parts) != 0) {
        rounding = Int(screenWidth.truncatingRemainder(dividingBy: parts))
        }
}
//----
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        var roundingWidth = 0
        if(rounding != 0) {
        rounding -= 1
        roundingWidth = 1
        }

        return CGSize(width: Int(screenWidth / parts) + roundingWidth, height: yourHeight)
}