禁用包含NSOutlineView且动态行高的NSScrollView的初始大小调整动画

时间:2018-09-06 15:34:39

标签: cocoa nsoutlineview nsscrollview

我有一个NSScrollview,其中包含一个启用了自动行高的NSOutlineView(NSTableView也应该相关)。每行都包含一个NSTextField,该字段可以是多行,具体取决于列的宽度和其文本的长度。在NSOutlineView的设置中,我想通过突出显示并滚动使其可见来显示选定的行。

自动布局可以正常工作,但是,(如https://developer.apple.com/library/archive/releasenotes/AppKit/RN-AppKit/#10_13NSTableView%20Automatic%20Row%20Heights中所述),轮廓视图的初始高度由静态高度值或委托heightOfRow方法确定。因此,轮廓视图会在短时间内用不同的值两次估计其首选大小:第一个来自高度,第二个来自自动布局。 (我试图使委托返回与自动布局相同的高度值,但没有成功。)

但是,尽管可以快速确定正确的大小(因为没有可见的调整行大小的迹象),但是NSScrollView似乎为这种大小变化设置了动画效果几秒钟,这可以看作是垂直滚动条的可见收缩。而且,此动画会干扰滚动到选定行的动作,从而导致跳动的滚动动画,有时还会导致错误的最终位置(选定行位于可见区域之外)。

那么,有什么方法可以(暂时)禁用调整大小的滚动动画,或者有其他方法可以解决此问题?

0 个答案:

没有答案