Cocoa NSScrollView中的NSTableView不';t拖动时自动滚动

Cocoa NSScrollView中的NSTableView不';t拖动时自动滚动,cocoa,drag-and-drop,nstableview,nsscrollview,Cocoa,Drag And Drop,Nstableview,Nsscrollview,我目前正在我的OSX应用程序的表视图中实现拖放重新排列。虽然正常的滚动工作正常,但拖动时的自动滚动完全被破坏 如果我抓取一个单元格并开始拖动,autoscroll只会告诉表格滚动到顶部。如果我在拖动过程中使用触控板手动滚动,表格会持续弹出到顶部。如果拖动其中一个顶部单元格,则在靠近底部拖动时,表格不会自动向下滚动 我将NSScrollView子类化,并重写了scrollClipView方法。我看到它被一些坐标为(0,0)的内部autoscroll方法调用 因为我看不到内部方法在做什么,而Gog

我目前正在我的OSX应用程序的表视图中实现拖放重新排列。虽然正常的滚动工作正常,但拖动时的自动滚动完全被破坏

如果我抓取一个单元格并开始拖动,autoscroll只会告诉表格滚动到顶部。如果我在拖动过程中使用触控板手动滚动,表格会持续弹出到顶部。如果拖动其中一个顶部单元格,则在靠近底部拖动时,表格不会自动向下滚动

我将NSScrollView子类化,并重写了
scrollClipView
方法。我看到它被一些坐标为(0,0)的内部autoscroll方法调用

因为我看不到内部方法在做什么,而Goggle和其他方法什么也没找到,所以我有点卡住了

以前有人遇到过这个问题吗?根据过去的经验,我觉得这与自动布局有关,但我不知道是什么。或者可能是完全无关的事情


关于如何进一步排除故障有什么想法吗?

我遇到了同样的问题。在我的例子中,问题是我在Interface Builder中将
NSTableCellView
的高度设置为10000,这样水平分隔符就不会显示在实际行下方的空行中

但是,在运行时加载的my
NSTableCellViews
的实际高度是43px

因此,当我开始拖动单元格重新排序时,
NSScrollView
试图一次滚动10000像素,而不是43像素

这看起来像是一个bug,因为我的
NSOutlineView
子类实现了以下方法来动态设置每行的高度

func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat
显然,在拖放操作期间,autoscroll机制会忽略该方法,并且只使用Interface Builder中设置的值


因此,我刚刚在Interface Builder中将虚拟的
NSTableCellView
的高度更改为43px,我将只接受为空行显示的水平分隔符。

向我们展示您的代码。您感兴趣的代码是什么?鉴于此应用程序的性质,我无法公开大部分代码库。有什么特别的吗?我对“我将NSScrollView子类化并重写scrollClipView方法”感兴趣。我这样做只是为了调试以检查调用它的位置。否则,我不会覆盖该方法。如果有疑问,请归咎于自动布局。