Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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/2/tensorflow/5.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 带有快照的现代UI CollectionView-如何在不完全重新加载单元格的情况下更新单元格内容? 重复指控:_Ios_Swift_Uicollectionview_Nsdiffabledatasourcesnapshot - Fatal编程技术网

Ios 带有快照的现代UI CollectionView-如何在不完全重新加载单元格的情况下更新单元格内容? 重复指控:

Ios 带有快照的现代UI CollectionView-如何在不完全重新加载单元格的情况下更新单元格内容? 重复指控:,ios,swift,uicollectionview,nsdiffabledatasourcesnapshot,Ios,Swift,Uicollectionview,Nsdiffabledatasourcesnapshot,这个问题被错误地标记为我问的另一个问题的重复。这里的问题是关于在不完全重新加载的情况下将更改传递到单元(动态更改其内容,而不是交叉淡入新内容),而另一个问题是关于在单元内容现在被抽象掉时从单元(到视图控制器)传递信息的结构化方式。这是两件不同的事情,因此这个问题不是重复的!请重新打开它。然而,我确实意识到这个问题并不像它应该的那么清楚,这可能是造成这个事实的原因,所以我更新了它 iOS 14引入了一种新的方法来处理uiCollectionView和单元格,方法是使用UIContentConfi

这个问题被错误地标记为我问的另一个问题的重复。这里的问题是关于在不完全重新加载的情况下将更改传递到单元(动态更改其内容,而不是交叉淡入新内容),而另一个问题是关于在单元内容现在被抽象掉时从单元(到视图控制器)传递信息的结构化方式。这是两件不同的事情,因此这个问题不是重复的!请重新打开它。然而,我确实意识到这个问题并不像它应该的那么清楚,这可能是造成这个事实的原因,所以我更新了它


iOS 14引入了一种新的方法来处理
uiCollectionView
和单元格,方法是使用
UIContentConfiguration
,它保存单元格的数据(真相来源)。它的构建使单元格在数据更改时自动刷新。但它通过交叉淡入新的细胞来刷新整个细胞。如果您想更好地控制更新动画,例如,当名称更改时,您只想更新该标签,而不想更新整个单元格,该怎么办

让我们看一个例子:您有一个单元格,显示一个人的姓名和他的汽车。数据来自模型
人员
,并加载到单元格中。将模型传递到单元的最简单方法是通过
iteminidentifier
,类似于:

struct-Person{
变量id:UUID
变量名称:String
我的名字:弦
}
...
枚举项{
个案人士
}
这样,只要
人员
发生更改(例如
carName
发生更改),您就可以将新快照应用于数据源并更新单元格。但是,此更新作为新旧版本单元之间的交叉淡入淡出动画进行。如果你不想那样呢?例如,如果希望单元仅设置汽车名称的动画,而不设置整个单元的“动画”(也称为“让单元自身设置动画以适应新数据”),该怎么办?用这种方法是不可能的

因此,为了防止
Person
更改重新加载整个单元格,您必须调整
ItemIdentifier
以不包括整个
Person
结构,而只包括其id或其他内容:

枚举项{
个案人员(UUID)
}
现在,只要id没有改变,单元格就不会被重新加载,这是完美的,让单元格有机会自行更新
Person
更改。但你是怎么做到的?显然,单元格现在需要从其他地方获取
Person
数据,但是如何将
Person
的更改传达给该单元格

这就是我想问的问题

我最近发布了一个与此相关的问题。这是我在尝试使用
Combine
publisher向单元格提供更新来解决上述问题时遇到的一个“问题”:

(要明确的是,这个问题也不是重复的。这是一个完全不同的问题,只是出于同样的动机!)