私のアプリケーションは、ウィンドウとそのウィンドウ内のボタンを XIB ファイルから 経由でロードしますNSWindowController
。では-windowDidLoad
、ウィンドウのサイズに基づいてボタンのフレームをプログラムで設定しました。ウィンドウのサイズは、表示されるボタンによって異なります)。自動サイズ変更マスクは、これらのボタンの XIB で適切に設定されます。問題は、ウィンドウが実際に表示されるときに、自動サイズ変更が適用されていないかのようにボタンが表示されることです。
NSButton
この問題をデバッグする-setFrame:
際に、[self frame]
スーパーの-setFrame:
. これを使用すると、フレームが 2 回設定されていることがわかります。最初はプログラム レイアウト コード (このフレームを A と呼びます) によって設定され、後で Cocoa がユーザー設定に基づいてウィンドウ サイズを調整します (自動サイズ変更マスクを適用し、フレームを B に設定します)。これらのフレームはすべて正しく見えます。
ただし、ウィンドウが表示されると、後者の-setFrame:
呼び出しには永続的な効果がなかったかのようになります。ボタンのフレームは A に戻ります。これは、デバッガーを中断してフレームを出力することで確認できます。フレームの自動サイズ変更の更新は元に戻されています。しかし-setFrame:
二度と呼ばれることはありませんでした。
なぜこの動作が見られるのかについてのアイデアはありますか?