我目前正在OS X应用中的表格视图中实施拖放重新排列。正常滚动工作正常,自动滚动,同时拖动它完全破碎。
如果我抓住一个单元格并开始拖动,则自动滚动只会告诉表格滚动到顶部。如果我在拖动表格时使用触控板手动滚动,则会不断弹出到顶部。如果我拖动其中一个顶部单元格,则在靠近底部拖动时,表格不会自动向下滚动。
我将NSScrollView子类化并覆盖了scrollClipView
方法。我看到它被一些内部自动滚动方法调用,坐标为(0,0)。
由于我无法看到内部方法正在做什么,而Goggle和SO一无所获,我有点卡住了。
之前是否有人遇到此问题?从过去的经历来看,我感觉它与AutoLayout有关,但我不知道是什么。或者它可能是完全不相关的东西。
有关如何进一步排除故障的任何想法?
答案 0 :(得分:2)
我遇到了同样的问题。在我的例子中,问题是我在Interface Builder中将NSTableCellView
的高度设置为10,000,这样就不会为实际行下面的空行显示水平分隔符。
但是,在运行时加载的NSTableCellViews
的实际高度为43px。
因此,当我开始拖动单元格以重新排序时,NSScrollView
一次尝试滚动10,000个像素,而不是一次滚动43个像素。
这似乎是一个错误,因为我的NSOutlineView
子类确实实现了以下方法来动态设置每一行的高度。
func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat
显然,在拖放操作期间,自动滚动机制会忽略该方法,并且仅使用Interface Builder中设置的值。
所以我只是在界面生成器中将虚拟NSTableCellView
的高度更改为43px,我将只使用为空行显示的水平分隔符。