2011-01-27 8 views
2

この問題は言葉にするのは難しいですが、実際の例が役立ちます。 iTunesアプリを見ると、Sidebar | Content分割でNSSplitView、ソースリストとアートワークパネルで入れ子になっているNSSplitViewが表示されます。NSSplitView NSSplitViewのサイズにプログラムで制約されたサブビューサイズ

enter image description here ======>enter image description here

あなたはサイドバーを薄くするために仕切りをドラッグすると、アートワークビュー(インナーNSSplitViewの下半分)は右アスペクト比を維持するために短縮されます。これは私の後の行動です。

外側のNSSplitViewdelegateをsideBarControllerをポイントするように連結しているので、サイズ変更を取得し、分割ビューの下部をプログラマチックにサイズ変更することができます。 この問題の半分は正しく動作しています。つまり、サイドバーの幅を変更すると、サイドバーパネルがそのサイズに応じて調整されます。

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

もちろん、1つのサイズを変更すると、もう1つのsplitviewのサイズが変更され、元のサイズに戻り、無限ループが作成されます。私はフラグとタイマーを追加してこれを試してみることができますが、すでにこの機能を実現するためにここに穀物を再投入しているようです。

ネストされた分割ビューパネルをその親の幅に適切に拘束するにはどうすればよいですか?iTunesの「選択項目/再生中」ビューのサイズ変更動作を複製する最も良い方法は何ですか?

答えて

3

あなたはあなたができるようになるこれは、私のCHLayoutManagerを見てみてみてください:

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

今、いつでもあなたのmySplitViewリサイズ、それは自動的に幅と一致するように、ビューの高さを更新します。

状況に応じてもう少し複雑な作業が必要な場合がありますが、これが一般的な考えです。

+0

お返事ありがとうございます。これは問題の半分を簡単に処理しますが、ユーザーが内部ビューのサイズを変更したときに起こることは、外部ビューのサイズを変更し、2つのView Controller間でファンキーなロジックを持たなければならない制約サイクルを取得する必要があります。この現象を回避する手段はありませんか?内側の分割ビューの手動でのサイズ変更を無効にできれば、あなたのソリューションは驚くほどうまくいくでしょう。 – coneybeare

+0

@coneybeareおそらく可能です。あなたの意見がどのように入れ子にされているかによって決まります。ただし、CHLayoutManagerは制約サイクルを実行しません。各ビューは変更通知ごとに1回処理され、制約は追加された順序で処理されます。 –

+0

私はそれに感謝 – coneybeare

関連する問題