Ios UICollectionViewCompositionLayout&x2B;UICollectionViewDiffableDataSource:是否有方法根据截面数据更改装饰视图?
我有一个Ios UICollectionViewCompositionLayout&x2B;UICollectionViewDiffableDataSource:是否有方法根据截面数据更改装饰视图?,ios,swift,uicollectionview,uicollectionviewcompositionallayout,Ios,Swift,Uicollectionview,Uicollectionviewcompositionallayout,我有一个UICollectionView,它使用UICollectionViewCompositionalLayout和UICollectionViewDiffableDataSource,工作正常 单元格由数据源的初始化器中定义的单元格提供程序提供。提供程序返回包含特定于XPath的数据的单元格 补充视图由var-supplementaryViewProvider:UICollectionViewDiffableDataSource.supplementaryViewProvider提供 唯一
UICollectionView
,它使用UICollectionViewCompositionalLayout
和UICollectionViewDiffableDataSource
,工作正常
单元格由数据源的初始化器中定义的单元格提供程序提供。提供程序返回包含特定于XPath的数据的单元格
补充视图由var-supplementaryViewProvider:UICollectionViewDiffableDataSource.supplementaryViewProvider提供
唯一的问题:我没有找到类似于DecorationViewProvider
:
在WWDC 2019示例之后,我使用
layout.register(SectionBackgroundDecorationView.self, forDecorationViewOfKind:
MyCompositionalCollectionViewController.sectionBackgroundDecorationElementKind)
及
为剖面提供背景视图的步骤
问题:
由于我没有找到提供程序,背景装饰视图会自动初始化,因此我没有找到根据截面数据更改它的方法
例如,我想根据剖面为背景装饰视图设置不同的颜色
如何让背景装饰视图知道它属于哪个分区,或者如何根据分区设置属性
(我想到的唯一一个肮脏的黑客:我可以编写20个不同的类SectionBackgroundDecorationView1
,SectionBackgroundDecorationView2
,使用不同的进行分类:
对于每个类,每个类都有硬编码,它属于第0节,第1节……必须有更好的解决方案)我认为为分区指定装饰视图的唯一方法是通过decorationItems
属性。所以,我不认为你可以避免注册尽可能多的装饰意见,因为你有不同的背景(我同意这是不理想的)。但是,您可以通过init(sectionProvider:)
初始化布局,将装饰视图指定给相应的部分。只需使用闭包的节索引推断节标识符,并返回每个配置了适当装饰视图的节。这可能或多或少是您已经提出的解决方案。是的,我已经通过init(sectionProvider:)
初始化了布局。问题在于,配置不是在视图中进行的,而是在NSCollectionLayoutDecorationItem
中进行的。这里唯一的可变参数是elementKind
,这是我的丑陋伎俩。
let sectionBackgroundDecoration = NSCollectionLayoutDecorationItem.background(
elementKind: MyCompositionalCollectionViewController.sectionBackgroundDecorationElementKind)
section.decorationItems = [sectionBackgroundDecoration]