NSTableView in NSScrollView doesn't autoscroll when dragging

半世苍凉 提交于 2021-02-04 19:46:25

问题


I'm currently implementing drag and drop rearranging in a table view in my OS X app. While normal scrolling works fine, autoscroll while dragging it totally broken.

If I grab a cell and start dragging, autoscroll just tells the table to scroll to the top. If I manually scroll using the trackpad during dragging the table continually pops to the top. If I drag one of the top cells, the table will not autoscroll down when dragging near the bottom.

I subclassed NSScrollView and overrode the scrollClipView method. I see that it's being called by some internal autoscroll method with the coordinates of (0, 0).

Since I can't see what that internal method is doing, and Goggle and SO are turning up nothing, I'm a bit stuck.

Has anyone run into this issue before? From past experiences, I have the feeling it's something AutoLayout related, but I have no idea what. Or maybe it's something completely unrelated.

Any ideas on how to further troubleshoot?


回答1:


I ran into the same issue. In my case, the problem was that I set the height of the NSTableCellView to 10,000 in Interface Builder so that the horizontal separators wouldn’t be displayed for empty rows below the actual rows.

However, the actual height of my NSTableCellViews loaded at run time was 43px.

So as soon as I started dragging a cell to re-order it, the NSScrollView was trying to scroll 10,000 pixels at a time instead of 43 at a time.

This seems like a bug, because my NSOutlineView subclass does implement the following method to dynamically set the height of each row.

func outlineView(_ outlineView: NSOutlineView, heightOfRowByItem item: Any) -> CGFloat

Apparently that method is ignored by the autoscroll mechanism during drag and drop operations, and only the value set in Interface Builder is used.

So I just changed the height of the dummy NSTableCellView to 43px in Interface Builder, and I’ll just live with the horizontal separators being displayed for empty rows.



来源:https://stackoverflow.com/questions/38609711/nstableview-in-nsscrollview-doesnt-autoscroll-when-dragging

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!