UICollectionView 容器填充

Posted

技术标签:

【中文标题】UICollectionView 容器填充【英文标题】:UICollectionView container padding 【发布时间】:2013-11-07 18:44:08 【问题描述】:

我正在尝试向 UICollectionView 的容器添加填充。我希望它看起来像这样,周围有一个 10pt 的填充。所以在示例屏幕中,底部有一个 10pt 的填充:

layout.minimumInteritemSpacing = layout.minimumLineSpacing = 10;

我正在使用 UICollectionViewFlowLayout 来布局单元格。我还尝试了一个“技巧”,在顶部添加一个 10pt 视图,但由于它们是分开的,因此内容似乎不会滚动视图。

【问题讨论】:

【参考方案1】:

请尝试将以下代码放入viewDidLoad()

collectionView!.contentInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

这将为 collectionView 的每一侧添加填充。


PS:我知道这个问题已经有一段时间了,但它可能会对某人有所帮助;)

【讨论】:

非常感谢,这行得通。应该被标记为答案!【参考方案2】:

您的UICollectionViewFlowLayoutsectionInset 属性似乎是您需要修改的。

您可以使用UIEdgeInsetsMake 创建一个带有上、左、右和下边距的UIEdgeInsets,并将其设置为sectionInset 属性。

这是UICollectionViewFlowLayout 的文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UICollectionViewFlowLayout_class/Reference/Reference.html

【讨论】:

这是一个分页视图(垂直)。使用插入设置节标题只会影响第一页。还有其他想法吗?【参考方案3】:

我使用了来自UICollectionViewDelegateFlowLayout 委托的几个方法来完成我正在寻找的东西。我试图向有阴影的单元格添加“填充”。这是为了确保它们具有“浮动”的效果,并且不会触及UICollectionView 的边缘。

首先,调用sizeForItemAt indexPath 方法并给单元格一个大小:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: collectionView.bounds.width * 0.80, height: collectionView.bounds.height * 0.98)

然后,调用insetForSectionAt section 方法,并设置单元格的插入:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 
    return UIEdgeInsets(top: 20, left: 25, bottom: 20, right: 25)

【讨论】:

【参考方案4】:

如果您使用配置,请将布局配置上的 contentInsetsReference 设置为跟随 layoutMargins,然后在 collectionView 本身上设置 layoutMargins。

var config = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
config.headerMode = .supplementary
        
let layout = UICollectionViewCompositionalLayout.list(using: config)
layout.configuration.contentInsetsReference = .layoutMargins
        
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        
collectionView.layoutMargins = .init(top: 16, left: 64, bottom: 16, right: 64)

【讨论】:

以上是关于UICollectionView 容器填充的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 未注册单元格

UiCollectionView 间距问题 - 快速

RFQuiltLayout 和 UICollectionView

UICollectionView

如何在 UICollectionView 中居中行?

UICollectionView 中的多个部分