ios - 如何防止我的部分标题在组合布局中重叠单元格
问题描述
我希望标题出现在我的组合布局中的每个部分上方,但我找不到让它们出现在内容上方而不是重叠的方法,这是我的布局代码:
func createLayout() -> UICollectionViewLayout {
let config = UICollectionViewCompositionalLayoutConfiguration()
config.scrollDirection = .horizontal
config.interSectionSpacing = 16
let layout = UICollectionViewCompositionalLayout(sectionProvider: {
(sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
let leadingItem = NSCollectionLayoutItem(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .estimated(50)))
let widthFraction: CGFloat = UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height ? 0.2 : 0.8
let containerGroup = NSCollectionLayoutGroup.vertical(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(widthFraction),
heightDimension: .estimated(50)),
subitems: [leadingItem])
let section = NSCollectionLayoutSection(group: containerGroup)
section.boundarySupplementaryItems = [self.makeHeader()]
section.orthogonalScrollingBehavior = .continuous
section.interGroupSpacing = 16
return section
}, configuration: config)
return layout
}
func makeHeader() -> NSCollectionLayoutBoundarySupplementaryItem {
let widthFraction: CGFloat = UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height ? 0.2 : 0.8
let size = NSCollectionLayoutSize(widthDimension: .fractionalWidth(widthFraction),
heightDimension: .estimated(50))
let sectionHeader = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: size,
elementKind: UICollectionView.elementKindSectionHeader,
alignment: .top)
return sectionHeader
}
解决方案
这是我的解决方案,但它只允许在我的部分中使用固定高度的标题:
你需要设置
section.supplementariesFollowContentInsets = false
然后偏移该部分:
section.contentInsets = NSDirectionalEdgeInsets(top: 66, leading: 8, bottom: 0, trailing: 8)
func createLayout() -> UICollectionViewLayout {
let config = UICollectionViewCompositionalLayoutConfiguration()
config.scrollDirection = .horizontal
let layout = UICollectionViewCompositionalLayout(sectionProvider: { (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
let leadingItem = NSCollectionLayoutItem(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .estimated(50)))
let widthFraction: CGFloat = UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height ? 0.2 : 0.8
let containerGroup = NSCollectionLayoutGroup.vertical(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(widthFraction),
heightDimension: .estimated(50)),
subitems: [leadingItem])
let section = NSCollectionLayoutSection(group: containerGroup)
section.boundarySupplementaryItems = [self.makeHeader()]
section.supplementariesFollowContentInsets = false
section.orthogonalScrollingBehavior = .continuous
section.interGroupSpacing = 16
section.contentInsets = NSDirectionalEdgeInsets(top: 66, leading: 8, bottom: 0, trailing: 8)
return section
}, configuration: config)
return layout
}
func makeHeader() -> NSCollectionLayoutBoundarySupplementaryItem {
let widthFraction: CGFloat = UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height ? 0.2 : 0.8
let size = NSCollectionLayoutSize(widthDimension: .fractionalWidth(widthFraction),
heightDimension: .absolute(50))
let sectionHeader = NSCollectionLayoutBoundarySupplementaryItem(layoutSize: size, elementKind: UICollectionView.elementKindSectionHeader, alignment: .top)
return sectionHeader
}
推荐阅读
- git - 在 GCM 调用期间任何 git 命令都会挂起
- python - 将 PDT 区域中的时间戳转换为日期时间 - Python
- python - 使用 Makefile 和 Docker 和 Python 部署到 heroku
- c - 从不兼容的指针类型 [-Wincompatible-pointer-types] 类型传递“HAL_I2C_Master_Transmit”的参数 3
- markdown - Pandoc:在 SubTOC 中拆分 TOC
- python - 如何将已读取并解析的数据写入另一个文件?
- angular - 如何在使用 Angular 开发的整个应用程序中访问用户名?
- node.js - 如何通过 git bash 命令行将全栈(ReactJS、NodeJS、socketIO)项目上传到 github
- unity3d - 打包虚幻游戏后阻止显示电影文件
- python - 将 Python 时间转换为 MicroPython PyBoard