2016-07-27 6 views
1

現在、OS Xアプリケーションのテーブルビューでドラッグアンドドロップの並べ替えを実装しています。通常のスクロールは正常に動作しますが、自動スクロールは完全に壊れます。NSScrollViewのNSTableViewはドラッグ時に自動スクロールしません

セルをつかんでドラッグを開始すると、自動スクロールは表の上にスクロールするように指示します。ドラッグ中にトラックパッドを使用して手動でスクロールすると、テーブルが連続して上にポップします。一番上のセルのいずれかをドラッグすると、下にドラッグするとテーブルが自動スクロールしません。

NSScrollViewをサブクラス化し、scrollClipViewメソッドをオーバーライドしました。座標が(0、0)の内部自動スクロールメソッドによって呼び出されていることがわかります。

enter image description here

私はその内部メソッドが何をしているかを見ることができないので、とゴーグルおよびSO何も上げされていない、私は少しこだわっています。

誰もこの問題に遭遇したことはありますか?過去の経験から、私はそれがAutoLayoutに関連する何かの気持ちを持っていますが、私は何が分かりません。それとも、まったく無関係なものかもしれません。

トラブルシューティングの方法に関するご意見はありますか?

+0

あなたのコードを教えてください。 – Willeke

+0

あなたはどんなコードを見たいですか?このアプリケーションの性質上、コードベースの大部分を公開することはできません。特に何かありますか? –

+0

"NSScrollViewをサブクラス化して、scrollClipViewメソッドをオーバーライドしました。" – Willeke

答えて

2

同じ問題が発生しました。私の場合、問題は、Interface BuilderでNSTableCellViewの高さを10,000に設定して、実際の行より下の空の行に水平区切り文字が表示されないようにすることでした。

ただし、実行時にロードされたNSTableCellViewsの実際の高さは43pxでした。

セルをドラッグして並べ替えるとすぐにNSScrollViewは、一度に4300ではなく、一度に10,000ピクセルずつスクロールしようとしていました。

私のNSOutlineViewサブクラスは、各行の高さを動的に設定する次のメソッドを実装しているため、これはバグのようです。

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

このメソッドは、ドラッグアンドドロップ操作中に自動スクロールメカニズムによって無視され、Interface Builderで設定された値だけが使用されているようです。

Interface BuilderでダミーNSTableCellViewの高さを43pxに変更しました。空の行には水平の区切り文字が表示されます。

+0

ありがとう!これはうまくいった! –

関連する問題