4

私はプロパティインスペクタビューの王様をやっています。外側のパネルでのみカスタム レイアウト (フレーム プロパティを明示的に設定) で自動レイアウトを使用しています。説明させてください:

  • インスペクター プロパティ ビューの各行は、Autolayout のみを使用する InspectorPropertyCell によって実装されます。
  • セルをスタックし、自動レイアウトも使用する StackPanel カスタム コントロールがあります。グループごとにスタック パネルが関連付けられています。Group 04 は Group 03 の中にあります。どちらも折りたたみ可能です。
  • すべてのグループを積み重ねる外側のスタック パネルがあります。この外側のスタック パネルは、frame プロパティを使用して明示的に高さを設定します。
  • これはすべて NSScrollView 内に含まれています。

画像を見る:

ここに画像の説明を入力

すべて正常に動作しますが、ウィンドウのサイズを変更してコンテンツ領域をプロパティ インスペクター ビュー全体よりも小さくすると (プロパティ インスペクター ビューをスクロールできるようになります)、下にスクロールして最後のグループ (グループ 04) を折りたたむと、プロパティインスペクタ ビューが縮小し、正しく動作します。また、それに応じてスクロール表示可能領域が調整されます。問題は、グループ 04 の崩壊を元に戻せないことです。

コードにいくつかのブレークポイントを設定することで、問題が何であるかを発見しました。私はそれを解決する方法がわかりません。問題は、updateConstraints パスが呼び出されている間 (-setNeedsUpdateConstraints を呼び出しているため)、-layout パスが呼び出されないことです。-layoutSubtreeIfNeeded を呼び出してレイアウト パスを強制しても、折りたたみを行うときに (制約を使用して) 0 に設定した一部のセルの高さが 0 のままであるため、自動レイアウトは効果がないようです。私が崩壊したとき。

ウィンドウのサイズを変更すると、レイアウト パスが再度呼び出されます。もちろん、これは受け入れられません。

助けてください!!!自動レイアウトを完全に削除し、レイアウトのみを使用してカスタムレイアウトを実行しようとしています...

4

1 に答える 1

0

サブビューでレイアウトを明示的に呼び出すことで解決しました...それは少し奇妙です...しかし、自分自身をレイアウトする前に子供をレイアウトする必要があります(StackPanel)。

于 2012-12-08T01:08:50.807 に答える