2

この問題を言葉で表現するのは難しいですが、実際の例が役に立ちます。iTunesアプリを見ると、分割NSSplitView用のがあり、ソースリストとアートワークパネル用にSidebar | Contentネストされているように見えます。NSSplitView

ここに画像の説明を入力してください ======> ここに画像の説明を入力してください

仕切りをドラッグしてサイドバーを薄くすると、アートワークビュー(内側の下半分NSSplitView)が短くなり、適切なアスペクト比が維持されます。これが私が求めている行動です。

サイズの変更を取得し、分割ビューの下部をプログラムでサイズ変更できるように、sideBarControllerを指すようにNSSplitView外側を接続しました。問題のこの半分は正しく機能しています。つまり、サイドバーの幅を変更すると、サイドバーパネルのサイズがそれに応じて調整されます。delegate

攻撃で問題が発生しているのは、ネストされたNSSplitViewの高さが変更されたときにサイドバーの幅のサイズを変更する方法です。私はもともと、この内側のスプリットビューの仕切りをドラッグできないようにする方法を見つけようとしましたが、それを行う方法を見つけることができませんでした。私が今設定している方法は、内側のスクロールビューのデリゲートをメインのスプリットビューを所有するwindowControllerに設定し、高さを計算して情報パネルの幅を変更することです。

もちろん、1つのサイズを変更すると、他のsplitviewがそのサイズを変更します。これにより、元のサイズが再び変更され、無限のループが作成されます。フラグとタイマーを追加してこれを解決することもできますが、この機能を実現するために、ここでもう一度やり直しているようです。

ネストされたスプリットビューパネルをその親の幅またはより一般的に適切に制限するにはどうすればよいですか?iTunesの「選択されたアイテム/現在再生中」ビューのサイズ変更動作を複製する最良の方法は何ですか?

4

1 に答える 1

3

私のCHLayoutManagerを見てみてください。これにより、次のことが可能になります。

[mySplitView setLayoutName:@"splitview"];
CHLayoutConstraint *constraint = [CHLayoutConstraint constraintWithAttribute: CHLayoutConstraintAttributeHeight relativeTo:@"splitview" attribute: CHLayoutConstraintAttributeWidth];
[mySplitView addConstraint:constraint];

これで、サイズを変更するたびmySplitViewに、ビューの高さが幅に一致するように自動的に更新されます。

状況に応じてもう少し複雑なことをする必要があるかもしれませんが、これが一般的な考え方です。

于 2011-01-27T02:58:06.540 に答える