1

我在 NSTableView 中显示 2 种类型的数据,我们称它们为 A 型和 B 型。它是单列,每一行是 A 型或 B 型。我有 3 个按钮,它们基本上过滤数据以显示 A 型行/ B 型行/A&B 型行。每行的高度取决于文本的数量。

当按下过滤器按钮时,我正在加载新数据数组并将其与旧数组进行比较,从而构建一个 NSIndexSet 行,这些行将通过动画删除或插入。到目前为止一切都很好。

挑战在于,这在视觉上会让用户迷失方向,因为删除或插入行意味着没有“锚行”保持可见。

例如,A&B 两种类型的数据都显示出来了,并且第 7-12 行当前在 tableview 中可见。按下过滤器按钮以仅显示 A 类数据,导致第 2/4/5 行被删除,但由于滚动位置保持不变,第一个可见行现在是第 10 行。

通过定义传出和传入数据数组中存在的第一个可见行的“锚行”,我可以计算需要应用的滚动偏移量,以使该锚行保持在屏幕上的相同位置。这在没有行动画的情况下完美地工作,但在使用动画时成为一个大问题。

由于没有直接的方法来为 NSTableView 的滚动位置设置动画,因此我尝试为 NSClipView 的 scrollPoint 设置动画(由于动画不完全同步,导致锚行抖动)并为 NSClipView 边界的原点设置动画(在动画期间没有正确重绘,根本没有绘制行,这似乎是与 NSTableView 的核心动画冲突)。

所以我的问题是是否有更简单的方法来做到这一点(NSTableView 的子类?)或者我将不得不放弃 NSTableView 并使用 NSView 子视图创建一个自定义类?

4

0 回答 0