Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionView不符合UICollectionViewDelegateFlowLayout和insets_Ios_Swift_Uicollectionview - Fatal编程技术网

Ios UICollectionView不符合UICollectionViewDelegateFlowLayout和insets

Ios UICollectionView不符合UICollectionViewDelegateFlowLayout和insets,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,因此,我有一个CollectionView,其中包含以下代码: class MyViewController: UIViewController { ... @IBOutlet weak var imageCollectionView: UICollectionView! fileprivate let sectionInsets = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) fileprivate le

因此,我有一个CollectionView,其中包含以下代码:

class MyViewController: UIViewController {
    ...
    @IBOutlet weak var imageCollectionView: UICollectionView!
    fileprivate let sectionInsets = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
    fileprivate let itemsPerRow: CGFloat = 3
    ...

    override func viewDidLoad() {
        super.viewDidLoad()
        imageCollectionView.delegate = self
        imageCollectionView.dataSource = self
   }
}

...

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

        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = collectionView.bounds.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

        return CGSize(width: widthPerItem, height: widthPerItem)
    }

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

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}
我想要的是每行3个单元格,间距非常小,但每当我运行应用程序时,我都会得到如下结果:

其中每个黑色块都是一个单元格

对于我发现的类似问题,答案通常是实现UICollectionViewDelegateFlowLayout函数,我已经完成了这些函数,并且调用了我的函数,但没有按预期工作!即使我手动将
widthPerItem
值更改为稍小,它仍然不起作用

有人能看到我是否遗漏了一些明显的东西吗?
谢谢大家!

您是否确保最小项目间距仅设置为1点? 您可以在Interface Builder中或通过重写以下委托方法进行设置:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0;
}
我看到的另一个可能的原因是,
availableWidth
除以
itemsPerRow
的结果是一个浮点数。最后,单元格宽度和插入宽度之和可能实际超过集合视图宽度
0.x
像素。为确保不会发生这种情况,您可能需要使用
floor

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
    let availableWidth = collectionView.bounds.width - paddingSpace
    let widthPerItem = floor(availableWidth / itemsPerRow)

    return CGSize(width: widthPerItem, height: widthPerItem)
}

你的第一个建议成功了!!非常感谢!