この問題を言葉で表現するのは難しいですが、実際の例が役に立ちます。iTunesアプリを見ると、分割NSSplitView
用のがあり、ソースリストとアートワークパネル用にSidebar | Content
ネストされているように見えます。NSSplitView
======>
仕切りをドラッグしてサイドバーを薄くすると、アートワークビュー(内側の下半分NSSplitView
)が短くなり、適切なアスペクト比が維持されます。これが私が求めている行動です。
サイズの変更を取得し、分割ビューの下部をプログラムでサイズ変更できるように、sideBarControllerを指すようにNSSplitView
外側を接続しました。問題のこの半分は正しく機能しています。つまり、サイドバーの幅を変更すると、サイドバーパネルのサイズがそれに応じて調整されます。delegate
攻撃で問題が発生しているのは、ネストされたNSSplitView
の高さが変更されたときにサイドバーの幅のサイズを変更する方法です。私はもともと、この内側のスプリットビューの仕切りをドラッグできないようにする方法を見つけようとしましたが、それを行う方法を見つけることができませんでした。私が今設定している方法は、内側のスクロールビューのデリゲートをメインのスプリットビューを所有するwindowControllerに設定し、高さを計算して情報パネルの幅を変更することです。
もちろん、1つのサイズを変更すると、他のsplitviewがそのサイズを変更します。これにより、元のサイズが再び変更され、無限のループが作成されます。フラグとタイマーを追加してこれを解決することもできますが、この機能を実現するために、ここでもう一度やり直しているようです。
ネストされたスプリットビューパネルをその親の幅またはより一般的に適切に制限するにはどうすればよいですか?iTunesの「選択されたアイテム/現在再生中」ビューのサイズ変更動作を複製する最良の方法は何ですか?