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】:您的UICollectionViewFlowLayout
的sectionInset
属性似乎是您需要修改的。
您可以使用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 容器填充的主要内容,如果未能解决你的问题,请参考以下文章