我在NSTableView中显示2种类型的数据,我们称它们为A型和B型。它是单列,每行是A型或B型。我有3个按钮,基本上过滤数据显示A类型行/ B类型行/ A& B类型行。每行都是可变高度,具体取决于文本量。
当按下过滤器按钮时,我正在加载新的数据数组并将其与旧数组进行比较,从而构建一个NSIndexSet行,这些行将被移除或插入动画。到目前为止都很好。
挑战在于视觉上这对用户来说是迷惑的,因为删除或插入行意味着没有“锚行”保持可见。
e.g。显示A& B类型的数据,并且在表视图中当前可见行7-12。按过滤器按钮仅显示类型A数据,导致行2/4/5被删除但由于滚动位置保持不变,第一个可见行现在是第10行。
通过定义传出和传入数据数组中存在的第一个可见行的“锚行”,我可以计算需要应用的滚动偏移量,以使此锚行保持在屏幕上的相同位置。这在没有行动画的情况下完美地工作,但在使用动画时会成为一个巨大的问题。
由于没有直接的方法来动画NSTableView的滚动位置,我已经尝试动画NSClipView的scrollPoint(导致锚行抖动,因为动画没有完全同步)和动画的原点NSClipView边界(在动画期间不会正确地重绘,而根本没有绘制的行似乎是与NSTableView的核心动画冲突)。
所以我的问题是,是否有更简单的方法(NSTableView的子类?)或者我将不得不放弃NSTableView并使用NSView子视图创建自定义类?