2016-07-27 64 views
1

我目前在我的OS X應用程序的表格視圖中執行拖放操作。雖然正常的滾動工作正常,自動滾動,而拖動它完全破碎。NSScrollView中的NSTableView在拖動時不會自動滾動

如果我抓住一個單元格並開始拖動,自動滾動只會讓表格滾動到頂部。如果我在拖動桌面的過程中使用觸控板手動滾動,則會不斷彈出頂部。如果我拖動其中一個頂部單元格,則表格在底部附近拖動時不會自動向下滾動。

我劃分了NSScrollView並覆蓋了scrollClipView方法。我看到它被一些內部自動滾動方法調用,座標爲(0,0)。

enter image description here

因爲我看不到什麼內部方法是幹什麼的,和護目鏡等都是轉向了什麼,我有點卡住了。

有沒有人遇到過這個問題?從過去的經驗來看,我覺得這是AutoLayout的相關內容,但我不知道是什麼。或者,也許它完全不相關。

有關如何進一步排除故障的任何想法?

+0

向我們顯示您的代碼。 – Willeke

+0

你有興趣看什麼代碼?鑑於此應用程序的性質,我無法公開大部分代碼庫。有什麼特別的嗎? –

+0

我對「我subclassed NSScrollView和overrolde scrollClipView方法感興趣」。 – Willeke

回答

2

我遇到了同樣的問題。在我的情況下,問題是我在Interface Builder中將NSTableCellView的高度設置爲10,000,這樣水平分隔符將不會顯示在實際行下方的空行中。

但是,運行時加載的我的NSTableCellViews的實際高度爲43px。

因此,只要我開始拖動單元格重新排序它,NSScrollView試圖一次滾動10,000像素,而不是一次43。

這看起來像一個錯誤,因爲我的NSOutlineView子類確實實現了以下方法來動態設置每一行的高度。

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

顯然該方法由自動滾動機構中的拖放操作被忽略,並且只使用在界面生成器中設置的值。

所以我只是在界面生成器中將dummy的高度改爲43px,並且我將與顯示空行的水平分隔符一起生活。

+0

非常感謝!這工作! –