0

ユーザー イベントに応答して、次のことを行います。

  • ウィンドウに新しい NSView を追加してから、
  • そのビューのすぐ下に配置された NSPanel を表示します

私はこれを半分ずつやりました。新しいサブビューを追加できます。コンテナ ビュー-updateConstraintsはそれを識別し、正しいレイアウト制約を追加します。これにより、次にレイアウトが実行されたときにウィンドウに正しく配置されます。また、パネルを画面に表示する NSWindowController サブクラスがあります。

残念ながら、注文に問題があります。私のパネルのコントローラーは、新しい NSView のframeプロパティを見て配置場所を決定するだけですが、このメイン イベント ループの繰り返しの間、-layoutメソッドはまだ呼び出されていないため、まだ (0,0) に配置されています。

(これら 2 つの機能を分離し、「ビューの追加」と「パネルの作成」に 2 つの別個のユーザー イベントが必要な場合、パネルはビューの下に正しく配置されます。)

レイアウトの制約があるかのように、NSPanel を NSView にアタッチする方法はありますか? -layoutまたは、「これを行う(ウィンドウコントローラーのもの)が、次の呼び出しの後でのみ」と言う方法はありますか?

4

1 に答える 1

0

NSView のスーパービューとその制約を追加したらすぐに -layoutSubtreeIfNeeded を呼び出すだけで、すぐにレイアウトされ、パネルが追加されます。

または、NSPopOver を使用しますが、それらは特定の方法で描画され、それを望まない場合があります。

于 2014-02-06T08:12:12.860 に答える