CompositionalLayoutBuilder
让你能够通过结果构建器语法“组合”一个 UICollectionViewCompositionalLayout
/NSCollectionViewCompositionalLayout
。
它可以在任何你可能使用 UICollectionView
/NSCollectionView
的上下文中使用,包括我的另一个包:CollectionView
(它将预先打包使用布局构建器的初始化器)。
要将 CompositionalLayoutBuilder
添加到 Xcode 项目,请转到 File
> Add Package Dependencies...
,然后将 https://github.com/edonv/CompositionalLayoutBuilder
粘贴到搜索字段中。
要手动将其添加到 Swift Package,请将以下内容添加到 Package.swift
文件中的 dependencies
属性中
.package(
url: "https://github.com/edonv/CompositionalLayoutBuilder",
upToNextMajor(from: "0.0.0")
)
使用 CompositionalLayoutBuilder
let layout: CompositionalLayout = {
CompositionalLayout {
CompositionalSection {
CompositionalGroup(.horizontal, width: .fractionalWidth(1), height: .absolute(200)) {
LayoutGroup(.vertical, width: .fractionalWidth(0.75), height: .fractionalHeight(1)) {
LayoutItem(width: .fractionalWidth(1), height: .fractionalHeight(0.5))
.repeating(count: 2)
}
.interItemSpacing(.fixed(8))
CompositionalItem(width: .fractionalWidth(0.25), height: .fractionalHeight(1))
}
.interItemSpacing(.fixed(16))
}
CompositionalSection {
CompositionalGroup(.horizontal, width: .fractionalWidth(1), height: .absolute(100)) {
CompositionalItem(width: .fractionalWidth(0.5), height: .fractionalHeight(1))
}
}
.orthogonalScrollingBehavior(.continuous)
}
.scrollDirection(.vertical)
}()
使用原生的 UICollectionViewCompositionalLayout
let layout: UICollectionViewCompositionalLayout = {
UICollectionViewCompositionalLayout { section, _ in
switch section {
case 0:
let innerItem = NSCollectionLayoutItem(layoutSize: .init(
widthDimension: .fractionalWidth(1),
heightDimension: .fractionalHeight(0.5)
))
let innerGroup = NSCollectionLayoutGroup.vertical(
layoutSize: .init(
widthDimension: .fractionalWidth(0.75),
heightDimension: .fractionalHeight(1)
),
subitem: innerItem,
count: 2
)
innerGroup.interItemSpacing = .fixed(8)
let outerItem = NSCollectionLayoutItem(layoutSize: .init(
widthDimension: .fractionalWidth(0.25),
heightDimension: .fractionalHeight(1)
))
let mainGroup = NSCollectionLayoutGroup.horizontal(
layoutSize: .init(
widthDimension: .fractionalWidth(1),
heightDimension: .absolute(200)
),
subitems: [innerGroup, outerItem]
)
return .init(group: mainGroup)
case 1:
let innerItem = NSCollectionLayoutItem(layoutSize: .init(
widthDimension: .fractionalWidth(0.5),
heightDimension: .fractionalHeight(1)
))
let mainGroup = NSCollectionLayoutGroup.horizontal(
layoutSize: .init(
widthDimension: .fractionalWidth(1),
heightDimension: .absolute(100)
),
subitems: [innerItem]
)
let section = NSCollectionLayoutSection(group: mainGroup)
section.orthogonalScrollingBehavior = .continuous
return section
default:
return nil
}
}
}()
文档可以在此处找到,托管在 Swift Package Index 上。