如何在没有动画的情况下滚动RowToVisible

时间:2019-07-17 07:34:21

标签: cocoa nstableview

在Mac上,按住向上或向下箭头时,Mail和Finder的表格视图上的滚动看起来很稳定。行高亮与列的顶部或底部齐平,并且行无动画。

8年前似乎是hard to not do this。现在,我似乎无法停止scrollRowToVisible进行动画制作了。{p1

我尝试用NSOutlineViewNSAnimationContext.beginGrouping()等包装呼叫,以将任何动画持续时间设置为CATransaction.begin(),但是没有运气。

总有没有办法使这个电话变得响亮-或者我应该使用低一点的东西吗?

编辑

这是我的代码。持续时间在这里无效。滚动动画总是有几帧,并且动画的端点有些不规则(即,滚动到视图的底部边缘并不总是与底部边缘对齐)。

0.0

使用runAnimationGroup具有相同的结果:

if selectedRows != outlineView.selectedRowIndexes {
            outlineView.selectRowIndexes(selectedRows, byExtendingSelection: false)

            // I would love this not to animate like in mail, but it cannot be stopped!!!
            if selectedRows.one {
                NSAnimationContext.beginGrouping()
                NSAnimationContext.current.allowsImplicitAnimation = false
                NSAnimationContext.current.duration = 0
                outlineView.scrollRowToVisible(selectedRows.first!)
                NSAnimationContext.endGrouping()
            }
        }

我的表中有可变高度的行,但是我不明白为什么这会有所作为。从上面的代码中,选择的更改始终在表中的任何移动之前突出显示,进一步表明滚动动画没有被删除。

1 个答案:

答案 0 :(得分:0)

我自己遇到了这个问题,并通过将def createDT(c1,c2,c3): temp = pd.DataFrame(columns = [c1,c2,c3]) print(type(temp)) return temp DT = createDT("col1","col2","col3") 子类化并像这样覆盖NSClipView来解决了这个问题:

func scroll(to newOrigin: NSPoint)

对于包含子类剪辑视图的滚动视图,这应该完全禁用平滑滚动,这是您正在描述的动画效果。