【问题标题】:CollectionView Cell spacingCollectionView 单元格间距
【发布时间】:2018-10-21 13:28:45
【问题描述】:

在使用我使用 collectionView 的旧方式后,我现在使用 Apple 代码 sn-p 来处理 collectionView。问题是我无法实现单元格间距的代码,例如,确切的 3 个单元格应该排成一行。

这是我用于单元格间距的旧代码(现在它不起作用,我想知道为什么......)

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = collectionView.frame.width / 3 - 1 // number of cells in a row. now it's 3 

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

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

我怎样才能让一切看起来比现在更好?因为现在连续的单元格数取决于 iPhone 型号。此外,间距也取决于 iPhone 型号。

【问题讨论】:

  • 请在您的问题中仅包含相关代码。不要倾倒整个课程,让人们阅读与您所要求的内容无关的代码。请阅读 minimal reproducible exampleedit 您的问题,并使用演示问题的最小代码
  • @AshleyMills 我说我不知道​​ Apple 如何处理单元格之间的间距,这就是我将所有代码放在这里的原因。现在我将代码更改为超链接。我不是 Swift 的专业人士,如果我知道代码的哪一部分是错误的,我可能会自己修复它。
  • 我认为即使对于非专业开发人员来说,从照片库中获取或缓存资产的代码也不会影响集合视图布局。创建minimal reproducible example 不仅仅是为了我们的利益,通过删除不相关的代码,它会帮助您找出问题所在。请添加与集合视图布局有关的代码,而不是所有其他内容
  • @swiftylifestyle : 你必须继承流布局并覆盖 layoutAttributesForElementsInRect 来实现你想要的,网上有很多教程解释了完全相同的解决方案,所以请寻找你的子流布局教程会找到一个
  • @AshleyMills 实际上,您很严格但正确:) 无论如何,我找到了解决方案,所以我发布了完美的答案。另外,我删除了我正在使用的代码,因为它不相关。很抱歉。

标签: ios swift collectionview


【解决方案1】:

为了设置间距或要显示多少个单元格,您需要做的就是使用 UICollectionViewDelegateFlowLayout

这是完美的代码:

extension CollectionViewController: UICollectionViewDelegateFlowLayout {


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = collectionView.frame.width / 3 - 1

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

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

另外,在你的 viewDidLoad 函数中写 collectionView?.delegate = self

【讨论】: