den*_*niz 1 dynamic ios uicollectionview swift uicollectionviewcompositionallayout
TLDR;根据部分,我需要调整单元格的大小:
我只是在寻找:“是的,您可以通过组合布局来实现这一点,这就是如何......”。或者“不,你不能用组合来实现这个,你必须使用流布局或其他一些自定义布局。”
几个额外的要求:
UITableViewAutomaticDimension背景资料:
您可以使用UICollectionViewCompositionalLayout. 就是这样:
let layoutSize = NSCollectionLayoutSize(
widthDimension: .estimated(100),
heightDimension: .absolute(32)
)
let group = NSCollectionLayoutGroup.horizontal(
layoutSize: .init(
widthDimension: .fractionalWidth(1.0),
heightDimension: layoutSize.heightDimension
),
subitems: [.init(layoutSize: layoutSize)]
)
group.interItemSpacing = .fixed(8)
let section = NSCollectionLayoutSection(group: group)
section.contentInsets = .init(top: 0, leading: 16, bottom: 0, trailing: 16)
section.interGroupSpacing = 8
return .init(section: section)
Run Code Online (Sandbox Code Playgroud)
重要的部分是组使用 占用可用宽度.fractionalWidth(1.0),但子项具有估计宽度。通过重写只要确保你的集合视图细胞可以自我大小sizeThatFits(_:),preferredLayoutAttributesFitting(_:)或使用自动布局。结果将是一个如下所示的布局:
要在同一个 中使用“第 1 部分”和“第 2 部分” UICollectionViewCompositionalLayout,只需使用创建您的布局init(sectionProvider:),您可以在其中返回适合NSCollectionLayoutSection当前部分标识符的内容:
func createCollectionViewLayout() -> UICollectionViewCompositionalLayout {
.init(sectionProvider: { [weak self] sectionIndex, _ in
guard let sectionIdentifier = self?.dataSource.snapshot().sectionIdentifiers[sectionIndex] else { return nil }
switch sectionIdentifier {
case .section1: return self?.createSection1()
case .section2: return self?.createSection2()
}
})
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,如果您的视图控制器pageSheet在 iOS 13+ 上使用默认样式呈现,您可能会看到此布局的一些奇怪行为。我在这里有一个相关的问题(使用略有不同的布局)。
| 归档时间: |
|
| 查看次数: |
1648 次 |
| 最近记录: |