IBPCollectionViewCompositionalLayout
在早期iOS 12的UICollectionViewCompositionalLayout的回滚版。
UIKit中新增了一个UICollectionViewCompositionalLayout类,使得创建定制的复杂收藏视图布局变得非常简单。您可以直接使用这些新的优秀API,无需在iOS 13广泛采用前维护两个不同的代码库。
注意:这个库仍在积极开发中。请在GitHub仓库中提交所有的错误、问题和建议作为 Issue。
什么是Collection View Compositional Layouts?
在2019年WWDC上,苹果推出了一种新的UICollectionViewLayout形式。UIKit中新增了一个UICollectionViewCompositionalLayout类,使得在不要求自定义UICollectionViewLayout的情况下创建组合布局变得更加简单。
在iOS 12及之前版本,我们需要通过继承UICollectionViewLayout
来实现这一点。我们必须正确覆盖许多方法,并且容易出错。
使用Collection View Compositional Layouts,您可以在几行代码中构建非常复杂的布局,甚至可以将嵌套的收藏视图和独立滚动部分的布局包含在其中。
另请参阅
截图
嵌套组 | 正交滚动 | 正交滚动 |
---|---|---|
列表 | 网格 | 嵌套网格 | 列 |
---|---|---|---|
不同部分 | 徽章 | 嵌套组 |
---|---|---|
马赛克 | 砖形网格 | 横幅砖形网格 | 横幅网格 |
---|---|---|---|
用法
将IBPCollectionViewCompositionalLayout/IBPCollectionViewCompositionalLayoutInteroperability.swift
文件复制到项目中。这会使编译器将相同的代码库提供给iOS 13及以下版本。
导入IBPCollectionViewCompositionalLayout
。
然后您可以直接使用 Collection View Compositonal 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)
...
IBPCollectionViewCompositionalLayoutInteroperability.swift
此文件在Xcode 11及以上环境中构建时,会抑制以下编译错误。
'UICollectionViewCompositionalLayout' is only available in iOS 13.0 or newer
特点
- 项目间间距
- 组间间距
- 部分间间距
- 固定间距
- 灵活间距
- 嵌套组
- 垂直滚动
- 水平滚动
- 补充视图(例如部分标题/页脚)
- 固定部分标题/页脚
- 装饰视图(例如背景视图)
- 正交滚动
- 正交滚动行为
- 预估大小(自动大小调整)
- 自定义组项目(绝对位置)
- 直接替换
待办事项(尚不支持)
- 支持从右到左显示
- 视觉调试描述
- 性能优化
需求
- Swift 5.0+ 或 Objective-C
- iOS 10.0+
安装
CocoaPods
将以下内容添加到您的 Podfile
pod 'IBPCollectionViewCompositionalLayout'
Carthage
将以下内容添加到您的 Cartfile
github "kishikawakatsumi/IBPCollectionViewCompositionalLayout"
特别感谢
感谢Ryo Aoyama,DiffableDataSources的作者。这是一个Diffable Data Sources的后向端口库。在示例代码中使用了它。
感谢Astemir Eleev。大多数示例代码都是借鉴了他的uicollectionview-layouts-kit。
作者
授权
该项目遵循MIT许可证提供。