IBPCollectionViewCompositionalLayout 0.6.9

IBPCollectionViewCompositionalLayout 0.6.9

维护者:kishikawa katsumi.



Languages Release CocoaPods Carthage MIT License Bitrise


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,您可以在几行代码中构建非常复杂的布局,甚至可以将嵌套的收藏视图和独立滚动部分的布局包含在其中。

另请参阅

截图

嵌套组 正交滚动 正交滚动
screenshot screenshot screenshot
列表 网格 嵌套网格
screenshot screenshot screenshot screenshot
不同部分 徽章 嵌套组
screenshot screenshot screenshot
马赛克 砖形网格 横幅砖形网格 横幅网格
screenshot screenshot screenshot screenshot

用法

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 AoyamaDiffableDataSources的作者。这是一个Diffable Data Sources的后向端口库。在示例代码中使用了它。

感谢Astemir Eleev。大多数示例代码都是借鉴了他的uicollectionview-layouts-kit

作者

Kishikawa Katsumi

授权

该项目遵循MIT许可证提供。