1

カスタム ビュー コントローラー クラスがあります。複数のカスタム ビュー コントローラーをインスタンス化し、それらのビューを NSStackView に追加したいと考えています。ボタンをクリックして、新しいビューをスタック ビューに追加します。ボタンは次のメソッドを呼び出します。

[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];

ただし、新しいビューが追加さstackView.spacingれると、前のビューがあった場所の下に追加されますが、その前のビューは表示されなくなりますが、呼び出したときに証明されるように、下の重力のビューとしてまだリストされています

NSLog(@"%lu",(unsigned long)[stackView viewsInGravity:NSStackViewGravityBottom].count);

sを追加しようとしてもこの問題は発生しないNSButtonので、カスタム ビューと関係がありますが、何が原因かわかりません。

助けてください。ありがとう!

4

1 に答える 1

4

カスタム ビューに、ビューの高さを完全に定義する制約 (または固有のコンテンツ サイズ) があることを確認する必要があります。そうでない場合、これらのビューは 0 の高さに折りたたまれています (これと同じことが以前にも起こりました)。

これが起こっているかどうかは、次の方法で確認できます。

[stackView insertView:myCustomViewController.view atIndex:0 inGravity:NSStackViewGravityBottom];
[stackView layoutSubtreeIfNeeded];
NSLog(@"%f - %d", NSHeight(myCustomViewController.view.frame), [myCustomViewController.view hasAmbiguousLayout]);


StackView を使用すると、後のものが「0 - 1」と出力されることがわかります。高さは 0 で、あいまいです。

垂直 NSStackView は、ビューを垂直に配置するだけで、特定の高さを提供しません。(水平スタック ビューと幅についても同じです)。

于 2014-04-30T03:39:14.203 に答える