Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionViewCompositionLayout&x2B;UICollectionViewDiffableDataSource:是否有方法根据截面数据更改装饰视图?_Ios_Swift_Uicollectionview_Uicollectionviewcompositionallayout - Fatal编程技术网

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]