假设您想使用自定义初始化程序来实例化UICollectionViewController
.
使用UICollectionViewFlowLayout
,这很简单:
init() {
let layout = UICollectionViewFlowLayout()
super.init(collectionViewLayout: layout)
}
但是,UICollectionViewCompositionalLayout
的指定初始化器需要一些参数,最重要的是 section 参数:
UICollectionViewCompositionalLayout(section:, configuration:)
// or
UICollectionViewCompositionalLayout(sectionProvider:, configuration:)
这意味着我必须在UICollectionViewController
. 如果布局包含诸如枚举之类的部分标识符,那么它也必须在初始化程序中。如果你必须NSCollectionLayoutEnvironment
在你的布局中包含,它也会成为问题。
init() {
let item = /..
let group = /..
let section = /..
let layout = UICollectionViewCompositionalLayout(section: section)
super.init(collectionViewLayout: layout)
}
我正在查看 Apple 的示例,所有示例都使用UIViewController
而不是UICollectionViewController
默认使用。尽管这些示例没有使用任何自定义初始化程序,但此方法确实通过允许我们在之后创建布局来解决上述问题:
var collectionView: UICollectionView! = nil
collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: createLayout())
您现在可以简单地使用UIViewController
的自定义初始化程序。
UICollectionViewCompositionalLayout
使用自定义初始化程序的最佳方法是什么?