Languages Release CocoaPods Carthage MIT License Bitrise


IBPCollectionViewCompositionalLayout

将 UICollectionViewCompositionalLayout 向后移植到更早的 iOS 12 版本。

UIKit 中新增了一个 UICollectionViewCompositionalLayout 类,可以更轻松地创建自定义的复杂集合视图布局。您可以立即使用这些出色的新 API,而无需维护两个不同的代码库,直到 iOS 13 被广泛采用。

注意:此库目前仍在积极开发中。请将所有错误、问题和建议作为 Issue 提交到 GitHub 仓库。

什么是集合视图 Compositional Layouts?

在 WWDC 2019 上,Apple 引入了一种新的 UICollectionViewLayout 形式。UIKit 中新增了一个 UICollectionViewCompositionalLayout 类,可以更轻松地创建 compositional layouts,而无需自定义 UICollectionViewLayout。

在 iOS 12 及更早版本中,我们需要子类化 UICollectionViewLayout 才能做到这一点。我们必须正确地重写许多方法,而且容易出错。

使用集合视图 Compositional Layouts,您可以用几行代码就能创建非常复杂的布局,甚至是带有独立滚动 section 的嵌套集合视图。

另请参阅

屏幕截图

嵌套 Group 正交滚动 正交滚动
screenshot screenshot screenshot
列表 网格 内嵌网格
screenshot screenshot screenshot screenshot
不同的 Section 徽章 嵌套 Groups
screenshot screenshot screenshot
马赛克 平铺网格 横幅平铺网格 纵向平铺网格
screenshot screenshot screenshot screenshot

用法

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)
...

IBPCollectionViewCompositionalLayoutInteroperability.swift

此文件在 Xcode 11 或更高版本的环境中构建时,会消除以下编译错误。

'UICollectionViewCompositionalLayout' is only available in iOS 13.0 or newer

功能特性

TODOs(尚未支持)

要求

安装

CocoaPods

将以下内容添加到您的 Podfile

pod 'IBPCollectionViewCompositionalLayout'

Carthage

将以下内容添加到您的 Cartfile

github "kishikawakatsumi/IBPCollectionViewCompositionalLayout"

特别感谢

感谢 DiffableDataSources 的作者 Ryo Aoyama。Diffable Data Sources 的向后移植库。它被用在示例代码中。

感谢 Astemir Eleev。大部分示例代码都借用自他的 uicollectionview-layouts-kit

作者

Kishikawa Katsumi

许可

此项目根据 MIT 许可提供