如何将 UICollectionViewController 的自定义初始化程序与 UICollectionViewCompositionalLayout 一起使用?

Posted

技术标签:

【中文标题】如何将 UICollectionViewController 的自定义初始化程序与 UICollectionViewCompositionalLayout 一起使用?【英文标题】:How to use a UICollectionViewController's custom initializer with UICollectionViewCompositionalLayout? 【发布时间】:2020-12-27 21:41:14 【问题描述】:

假设您想使用自定义初始化程序来实例化 UICollectionViewController

使用UICollectionViewFlowLayout,很简单:

init() 
    let layout = UICollectionViewFlowLayout()
    super.init(collectionViewLayout: layout)

但是,UICollectionViewCompositionalLayout 的指定初始化器需要一些参数,最重要的是节参数:

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 的 examples,默认情况下它们都使用 UIViewController 而不是 UICollectionViewController。尽管这些示例没有使用任何自定义初始化器,但此方法确实通过允许我们在之后创建布局来解决上述问题:

var collectionView: UICollectionView! = nil
collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: createLayout())

您现在可以简单地使用UIViewController 的自定义初始化程序。

UICollectionViewCompositionalLayout 与自定义初始化程序一起使用的最佳方式是什么?

【问题讨论】:

【参考方案1】:

你可能想多了。绝对没有法律阻止您更改分配给集合视图的布局;它的collectionViewLayout 属性可以随时分配。

所以只需在初始化程序中为集合视图控制器分配一个“虚拟”布局,然后像往常一样在viewDidLoad 中进行布局的真正创建和分配。

仅举一个常见的用例:如果您想使用组合布局,您将如何在情节提要中创建集合视图控制器?我所做的是给故事板中的集合视图一个流布局。然后在viewDidLoad 中,我在代码中创建了真正的布局(组合布局)并将其分配给self.collectionView.collectionViewLayout,并没有造成任何伤害。

【讨论】:

以上是关于如何将 UICollectionViewController 的自定义初始化程序与 UICollectionViewCompositionalLayout 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将thinkcmf导入eclipse

如何将CString转换成wstring

如何将Ios文件上传到

Qt如何将文字变成图片?

如何将Bitmap保存为本地图片文件?

在MATLAB中如何将图导出