为 UICollectionViewFlowLayout 设置 minimumLineSpacing 没有效果,必须使用 insetForSectionAtIndex 函数?

Setting minimumLineSpacing for UICollectionViewFlowLayout has no effect, must use insetForSectionAtIndex function?

目标是定义 UICollectionView 的部分之间的间距。

然而,设置 UICollectionViewFlowLayoutminimumLineSpacing 属性 没有效果:

   // Init <collectionView>
    collectionView.alwaysBounceVertical = true
    collectionView.contentInset = UIEdgeInsets(top: CollectionViewTopPadding, left: 0, bottom: CollectionViewBottomPadding, right: 0)
    let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    flowLayout.minimumLineSpacing = 5

唯一可行的方法是使用 insetForSectionAtIndex,如下所示:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
}

SO 集上的其他示例 minimumLineSpacing 所以谁能解释为什么这段代码不起作用?

根据 Apple 文档

The flow layout uses the value in minimumLineSpacing property to set the spacing between lines in a section.

所以不会设置section之间的间距,是为了设置section内rows/columns之间的space。如果你想在不实现委托方法的情况下实现部分之间的间距,你可以使用 sectionInset 属性 of UICollectionViewFlowLayout.

万一有人想知道如何只为一个部分做这件事:

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

    if section == 0{

       return UIEdgeInsetsMake(0, 0, 10, 0)
    }

    return UIEdgeInsetsMake(0, 0, 0, 0)
}