如何在UICollectionLayoutListConfiguration中设置列表项间距?
关于UICollectionLayoutListConfiguration设置列表项间距的解决方案
UICollectionLayoutListConfiguration本身没有直接提供设置列表项间距的属性,但你可以通过以下两种方式实现需求:
方法一:结合CompositionalLayout的Section配置
因为UICollectionLayoutListConfiguration本质是对CompositionalLayout的封装,你可以先通过ListConfiguration生成布局,再修改对应section的布局属性来设置item间距:
var listConfig = UICollectionLayoutListConfiguration(appearance: .plain) let layout = UICollectionViewCompositionalLayout.list(using: listConfig) // 修改section的interGroupSpacing(垂直列表中对应item间的垂直间距) if let section = layout.sectionModels.first { var modifiedSection = section modifiedSection.interGroupSpacing = 12 // 12为你需要的间距值 layout.sectionModels = [modifiedSection] } collectionView.collectionViewLayout = layout
这种方式更直接,适配你之前使用CompositionalLayout的习惯,适合统一设置所有item间距的场景。
方法二:利用section补充视图模拟间距
如果需要更灵活的间距控制(比如不同位置的item用不同间距),可以给每个item添加透明的section footer/header来模拟间距:
// 配置list configuration并注册footer var listConfig = UICollectionLayoutListConfiguration(appearance: .insetGrouped) collectionView.register(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: "SpacingFooter") // 返回footer尺寸(即间距高度) func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize { return CGSize(width: collectionView.bounds.width, height: 12) } // 返回透明footer视图 func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { let footer = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "SpacingFooter", for: indexPath) footer.backgroundColor = .clear return footer }
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

