2

同様の質問: Autolayout でレイアウトされたサブビューのサイズに基づいて親ビューのサイズを変更する方法

Apple Example InfoBarStackViewDisclosureViewControllerのように s (NSViewController サブクラス)をロードする NSStackView を取得しました。

Apple の例 InfoBarStackView

これらは、任意の高さのビューを展開および縮小できます。NSStackViewを含む親ビューの高さを の内容に応じて変更したいと思いNSStackViewます。動作するAppleの例では。

ただし、残念ながら、Apple は NSWindow のサイズを変更しており、私はCCNStatusItem( CCNStatusItem Github )、Apple メニュー バーのステータス項目にアタッチするビューを使用しています。そのウィンドウは、NSStackViewロード時に の内容に合わせてサイズ変更されますが、内容が変更されてもサイズ変更されません。

ビューをロードした後の CCNStatusItem ウィンドウ

セクションを展開すると、コンテンツがオーバーフローし、ビューの下端でクリップされます。

DisclosureViewController が拡張された CCNStatusItem ウィンドウ

すべての制約を調べて、正確に再現しようとしましたが、機能させることができませんでした。Apple の例では、すべてをプログラムで追加していますが、私は Interface Builder で NSStackView を追加しました。

NSStackView の制約は次のとおりです。 ここに画像の説明を入力

私の質問は次のとおりです: 親ビュー (ウィンドウ) がスタック ビューの内容に合わせて動的にサイズ変更されるように、Interface Builder にはどのような制約がありますか? ビューを機能させるには、ビューのメソッドを呼び出す必要がありますか?

必要な情報を提供できなかった場合はお知らせください。

アップデート

受け入れられた答えは、それを行う正しい方法でした。これが結果です。CCNStatusItem のフォーク バージョンは、https://github.com/julianvogels/CCNStatusItem.gitにあります。

スライドが機能するようになりました!

4

2 に答える 2

1

問題は、CCNStatusItem自動レイアウトに対応していないことです。ウィンドウのコンテンツ ビューを、独自のビュー クラスの 1 つのインスタンスに設定します ( CCNStatusItemWindowBackgroundView)。あなたのビューはそのビューのサブビューです。

ビューを作成して追加するとき、オフにしtranslatesAutoresizingMaskIntoConstraintsたり、制約を使用してスーパービューに相対的に配置したりすることはありません。これは基本的に、制約によって異なるサイズに強制できないことを意味します。

同様に、ビューを背景ビューに追加するとき、ビューをオフtranslatesAutoresizingMaskIntoConstraintsにしたり、ビューを背景ビューに関連付けるための制約を設定したりしません。

ソースがあるので、これらの変更を行うことができます。

于 2015-09-07T02:30:40.313 に答える