将 UICollectionViewCompositionalLayout 向后移植到更早的 iOS 12 版本。
UIKit 中新增了一个 UICollectionViewCompositionalLayout 类,可以更轻松地创建自定义的复杂集合视图布局。您可以立即使用这些出色的新 API,而无需维护两个不同的代码库,直到 iOS 13 被广泛采用。
注意:此库目前仍在积极开发中。请将所有错误、问题和建议作为 Issue 提交到 GitHub 仓库。
在 WWDC 2019 上,Apple 引入了一种新的 UICollectionViewLayout 形式。UIKit 中新增了一个 UICollectionViewCompositionalLayout 类,可以更轻松地创建 compositional layouts,而无需自定义 UICollectionViewLayout。
在 iOS 12 及更早版本中,我们需要子类化 UICollectionViewLayout
才能做到这一点。我们必须正确地重写许多方法,而且容易出错。
使用集合视图 Compositional Layouts,您可以用几行代码就能创建非常复杂的布局,甚至是带有独立滚动 section 的嵌套集合视图。
另请参阅
嵌套 Group | 正交滚动 | 正交滚动 |
---|---|---|
![]() |
![]() |
![]() |
列表 | 网格 | 内嵌网格 | 列 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
不同的 Section | 徽章 | 嵌套 Groups |
---|---|---|
![]() |
![]() |
![]() |
马赛克 | 平铺网格 | 横幅平铺网格 | 纵向平铺网格 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
将 IBPCollectionViewCompositionalLayout/IBPCollectionViewCompositionalLayoutInteroperability.swift
文件复制到您的项目中。它欺骗编译器,使相同的代码库可用于 iOS 13 和早于 iOS 12 的版本。
导入 IBPCollectionViewCompositionalLayout
。
然后您可以按原样使用集合视图 Compositional Layouts API。
import IBPCollectionViewCompositionalLayout
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .fractionalHeight(1))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .absolute(44))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
let section = NSCollectionLayoutSection(group: group)
let layout = UICollectionViewCompositionalLayout(section: section)
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
...
此文件在 Xcode 11 或更高版本的环境中构建时,会消除以下编译错误。
'UICollectionViewCompositionalLayout' is only available in iOS 13.0 or newer
将以下内容添加到您的 Podfile
pod 'IBPCollectionViewCompositionalLayout'
将以下内容添加到您的 Cartfile
github "kishikawakatsumi/IBPCollectionViewCompositionalLayout"
感谢 DiffableDataSources 的作者 Ryo Aoyama。Diffable Data Sources 的向后移植库。它被用在示例代码中。
感谢 Astemir Eleev。大部分示例代码都借用自他的 uicollectionview-layouts-kit。
此项目根据 MIT 许可提供