问题标签 [uicollectionviewdiffabledatasource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
65 浏览

swift - 在现代 UICollectionView 中自定义插入/删除动画

UICollectionViewCompositionalLayout使用with时如何为集合视图单元格应用自定义插入/删除动画UICollectionViewDiffableDataSource

以前我通过子类化UICollectionViewLayout和覆盖initialLayoutAttributesForAppearingItemand来做到这一点finalLayoutAttributesForDisappearingItem,但是每当通过 diffable 数据源应用快照时,有了这个新的东西,我只会获得任何更改的默认“淡入淡出”动画(即使我仍然覆盖这些方法)。

0 投票
2 回答
55 浏览

ios - 应用快照后如何滚动到 IndexPath

在应用集合视图快照后,我面临与滚动到 IndexPath 相关的问题。为此,我编写了以下代码

不幸的是,它在 < iOS 15 中对我不起作用

注意:适用于 iOS 15 及更高版本

0 投票
0 回答
23 浏览

ios - UICollectionViewCompositionalLayout 可选部分

我看过这个类似的问题:How to deal with empty items section in UICollectionView CompositionalLayout,但答案似乎是在快照中留下部分(我这样做了,但这留下了另一个问题,我描述稍后)或渲染一个非常小的部分。该解决方案似乎不是一个好的解决方案。


我有一个使用组合布局和可区分数据源的集合视图。集合视图有四个部分,但每个部分都是可选的,这意味着如果该部分的相应数据为空,则不应显示该部分。

代码

布局定义

我有一个部分提供程序,它使用sectionIndex来配置每个部分的外观。我认为这很糟糕,因为如果我在快照中没有第三部分的数据,例如,那么通常应该在第四部分中的所有内容现在都会有一个 indexPath,这将导致它像第三部分一样布局。

每个部分都有不同的项目大小,有些是正交滚动部分。因此,如果使用第三节布局呈现第四节数据,那么它看起来会出错。

数据源定义

这是定义数据源的地方。每个部分使用不同的数据模型类,因此我根据数据模型类的类型而不是索引路径来决定使用哪种类型的单元格。

快照构建

这里是包含每个部分(如果有数据)或排除(如果该部分为空)的位置。但是留下一个部分(例如,如果第三部分没有任何数据,那么它将被遗漏,但这将使第四部分的数据具有索引为 2 的索引路径,这将不适用于部分提供者。

如果我在快照中插入一个空部分,那仍然不起作用,因为其中一些部分有标题,所以如果它是一个有标题的部分,那么标题仍然会显示。但即使这些部分都没有标题,我认为它仍然会为该部分呈现一些额外的空白空间(但这可能是不正确的)。

概括

所以问题是,如果我的一个或多个部分没有数据,那么当它们被排除在快照之外时,这将导致后续部分的数据呈现在错误的部分中(因为部分提供者配置了基于空部分之后的每个部分的索引和 indexPaths 不再是原始 indexPath)。

问题

  1. 有没有办法让这些部分是可选的,并且任何常规视图和补充视图都不会为“空”部分呈现?
0 投票
0 回答
27 浏览

swift - UICollectionViewDiffableDataSource - 具有不同哈希的相同项目时崩溃

UICollectionViewDiffableDataSource用来填充UICollectionView数据。我的理解是,DiffableDataSource通过使用比较项目==,然后如果项目相等,它会比较hash值以查看是否有变化。

但根据我得到的错误,情况并非如此。

就我而言,我有与 uniqueID 进行比较的项目,而 hashValue 由用户输入的值确定。如果它们不能不同,那么使用 == 和 hashValue 有什么意义?