拖动元素进行重新排序时,NSTableView 滚动速度过快

NSTableView scrolls too fast when dragging element for reorder

在我的 macOS 项目中,我有一个带有单列的 NSTableView,其行可以通过拖放重新排序。

当元素过多且启用滚动时,拖放可以使table在接近底部或顶部时滚动。此行为是开箱即用的,我不必启用或配置它。

问题是,当我开始拖动一个元素并将鼠标向上或向下移动几个像素时,滚动速度真的太快了。 table 立即到达顶部或底部,不可能减速。真是郁闷。

我不知道在哪里干预或覆盖什么来自定义此行为。我在文档中没有看到任何与我可以更改的 "automatic" 滚动相关的内容。我现在真的是一头雾水

向我建议的解决方法是添加一个 sleep() 调用:

func tableView(_ tableView: NSTableView, validateDrop info: NSDraggingInfo, proposedRow row: Int, proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation

但是滚动变得有点不稳定,我很想知道正确的做法。

提前感谢您提供相关文档的任何提示或指针。

事实证明,自动滚动速度和热点区域是由拖放机制控制的,不能显式覆盖(至少我找不到方法)。

但是 这个答案拯救了我:

TL;DR 自动滚动热点区域和滚动速度取决于 NSTableCellView 大小,如 Interface Builder 中设置的那样。尺寸越大,热点区域越大,滚动速度越快。