问题标签 [diffabledatasource]

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 投票
2 回答
794 浏览

swift - UITableView diffable 数据源

如何使用 Diffable DataSource 在 Tableview 中创建多个部分。?

我使用 Diffable DataSource 创建 Simple TableView 但我无法理解如何使用标题设置多个部分。?

0 投票
3 回答
1504 浏览

ios - 具有自定义配置的 UICollectionView 列表 - 如何将单元格中的更改传递给视图控制器?

我已经实现了UICollectionView一个自定义列表UICollectionViewCellUIContentConfiguration使用新的iOS 14API。我一直在关注本教程:https ://swiftsenpai.com/development/uicollectionview-list-custom-cell/ (与 Apple 的示例项目一起)

基本上你现在有 a UICollectionViewCell, aUIContentConfiguration和 a UIContentViewcell仅设置其配置,保存content configuration单元格及其所有可能状态的数据,而content view是实际UIView替换UICollectionViewCell.contentView.

我让它工作了,它非常棒而且干净。但是有一点我不明白:

您将如何添加回调到UIContentView,或将单元格中所做的更改(例如UISwitch切换或UITextField更改)传达给viewController?和 cell之间的唯一联系是在创建的数据源viewController时在 cell 注册内部:collectionView

这是我能想到的唯一可以放置这种连接的地方,如上面的示例所示。但是,这不起作用,因为单元格不再对其内容负责。这个闭包必须传递给UIContentView为单元格创建实际视图的那个。

单元格与其内容视图之间的唯一联系是内容配置,但不能将闭包作为属性,因为它们不相等。所以我无法建立连接。

有谁知道如何做到这一点?

谢谢!

0 投票
1 回答
66 浏览

ios - UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示

如果我正在使用UICollectionViewControllerdiffableDataSource点击单元格 - 它会突出显示,但当我仍然握住它时会变得不突出。如果UIViewController + collectionViewdiffableDataSource- 一起使用,那么一切都按预期工作,并且单元格保持突出显示,直到我从中释放手指。如果UICollectionViewController与标准一起使用,则相同dataSource-一切正常。有没有人也注意到这个问题?任何建议或想法将不胜感激,也许我只是错过了一些东西,但现在感觉更像是苹果方面的错误

您可以在此处查看示例: https ://github.com/ashishbl86/MockAppStore/blob/0ea8e74a4823c8c80bd7e8d5c6a9514958fbe459/MockAppStore/CollectionViewController.swift

只需将这些方法添加到 CollectionViewController.swift 文件中:

当您的手指仍在单元格上时,您会看到打印了“未突出显示的单元格”

0 投票
1 回答
153 浏览

ios - UICollectionViewDiffableDataSource 可选部分

我正在尝试使用可区分的数据源实现集合视图。我有一些可选的广告,我想将它们放在集合视图的单独部分中(用于特定布局等)。我的部分如下所示:

advertismentSection 中项目的高度定义如下:

然后将此 heightDimension 用于组高度等。

当我将项目添加到 时,这工作正常advertismentSection,但是,当它为空时,我会假设它的高度应该为 0,但事实并非如此,无论它是否为空,它都是 200。当我尝试将高度设为 0 时,我收到一条警告,指出它无效。

我尝试的另一种方法是,当我没有要显示的内容时,根本不将此 advertismentSection 添加到快照中,但这会使应用程序崩溃,因为快照中的节数需要与 Section 枚举中定义的相同。

我应该如何解决这个问题?

0 投票
2 回答
456 浏览

swift - MacOs 上具有 Diffable DataSource 的 TableView

我正在使用 MacOs Big Sur 和 Xcode 12.2 编写应用程序。

我正在尝试为联系人列表实现表格视图(来自互联网上的示例)。

大部分代码是针对 IOS 的,很难移植到 MacOS 上。

对于大多数功能,该应用程序运行良好。

我无法成功实现节的页眉/页脚。

我之前围绕 CollectionView 构建的项目确实取得了成功。

但是我看不到 CollectionView 和 TableView 之间的类比。在 CollectionView 中,我为页眉/页脚使用了笔尖。

以下是 Diffable Datasource 示例的代码片段。

我希望有人可以帮助解决我的问题。

} '''

0 投票
1 回答
949 浏览

ios - 具有水平或正交滚动行为的 UICollectionViewCompositionalLayout 在屏幕边缘附近的项目间距不一致

我的作曲布局有以下布局

然后我的 collectionView 中有 30 个“日”项。

我的 UIcollectionViewController 覆盖了屏幕的整个宽度。我在屏幕上的单元格如下所示:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

单元格上的文本是它们的索引路径。您可以看到 0-4、5-9 之间的间距是均匀的,然后在边缘 4-5 和 9-10 上,它是不同的。我相信这是因为它是屏幕之间的“边缘”。但我能做些什么呢?

我也尝试过不使用正交滚动行为,只设置布局配置的滚动方向

它似乎达到了同样的目的。这里有什么建议吗?

编辑:似乎这种行为是基于组的大小。例如,当我使用 let dayGroup = NSCollectionLayoutGroup.horizo​​ntal(layoutSize: dayGroupSize, subitem: dayItem, count: 30) 时,它使所有项目彼此相邻,如下所示:

在此处输入图像描述

现在有 30 个单独的项目。请注意它如何自动间隔它们之间的距离,以便它可以将 30 放入 1 个屏幕宽度。因此,它仍然试图将 1 组中的所有项目强制到一个屏幕中,这是我不想要的行为。我希望该组是整个内容大小的宽度并且可以滚动。

0 投票
3 回答
670 浏览

ios - 如何通过 DiffableDataSource 更新 Section 中的页脚而不引起闪烁效果?

一个部分可能包含 1 个页眉、许多内容项和 1 个页脚。

对于DiffableDataSource,大部分网上的例子,都是用enum来表示Section。例如

但是,当Section有动态内容页脚时,我们可能需要使用struct来表示Section。例如

但是,我们应该如何只更新页脚?

目前提供的方法

DiffableDataSource:快照不重新加载页眉和页脚并不完全准确

如果我尝试更新页脚

我会得到以下闪烁的结果。

在此处输入图像描述

闪烁的原因是,diff 框架正在抛出整个旧的 Section,并用新的 Section 替换它,因为它发现TabInfoSection对象发生了变化。

有没有一种好方法,可以在DiffableDataSource不引起闪烁效果的情况下更新 Section 中的页脚?

p/s 整个项目源代码可以在https://github.com/yccheok/ios-tutorial/tree/broken-demo-for-footer-updating文件夹 TabDemo 下找到。

0 投票
2 回答
2466 浏览

ios - 刷新后停止 Diffable Data Source 滚动到顶部

如何在应用快照后停止将视图滚动到顶部的 diffable 数据源。我目前有这个...

存储偏移量,然后重新应用它。有时它可以完美运行,有时视图会跳跃。有没有更好的方法来做到这一点?

0 投票
0 回答
191 浏览

ios - NSDiffableSnapshot 导致 collectionview 的单元注册被重新调用,即使数据没有任何更改

我有一个问题NSDiffableDataSource。我创建了这个基本示例,其中包含一个UICollectionView显示随机数的单个项目:

每 2 秒,我将相同的快照重新应用到数据源。由于快照没有改变,我希望单元格也不会更新。就是这样……有点。从视觉上看,单元格没有变化(显示的数字保持不变)。但是,每次快照更新时,数据源实际上都会调用单元注册闭包,因此单元的内容配置确实会发生变化。它只是没有被绘制。

有人知道这里发生了什么吗?

提供一点背景知识:我问这个的原因是我想Combine publisher在创建单元格的内容配置时订阅一个。然后发布者发布单元格的数据,单元格可以更新其视图,允许自定义动画。(我可以简单地将数据放入 中item identifier,但是任何数据更改只会导致单元格交叉淡入到新的单元格中。这不好)。

它看起来像这样:

由于与发布者和订阅者一起工作可能很棘手(内存泄漏和其他东西),我需要知道如何在不引起任何问题的情况下做到这一点,并且快照的行为很奇怪。至少在我看来是这样的

0 投票
0 回答
77 浏览

swift - 具有不同单元注册的 DiffableCollectionViewDataSource

我一直在尝试为 diffable 集合视图数据源创建一个部分,该部分可能具有 GenericItem 列表,其中此类将具有类型为 UICollectionView.CellRegistration 的属性 cellRegistration。在这个类之后,所有其他项目都将继承,如下所示:

这样我就可以将我想要的任何单元格类型放入此列表,而不必担心在数据源中检查它是哪个项目类型,然后使用相应的 CellRegistration。但我一定是忽略/误解了某些东西,因为无论我如何尝试重写它,我最终都会遇到同样的错误: Cannot convert return expression of type 'UICollectionView.CellRegistration<SomeCollectionViewCell, SomeItem>' to return type 'UICollectionView.CellRegistration<UICollectionViewCell, GenericItem>'

有人可以解释如何使用这个新的 API 创建这样一个系统吗?

谢谢!