NSViewの寸法をプログラマティックに変更したいことがあります。これを行うには、さまざまなビューの寸法を取得し、それらを相互に調整し、setFrame:を使用して位置を変更すると便利です。NSViewのフレームメソッドが間違った結果を返すのはなぜですか?
問題は、フレームメソッドは通常、明らかに間違っているNSRectsを私の観点から返すことです。
私はInterface Builderで設定されたNSPanelと私のメインプログラムへの様々な接続を持つプログラムを持っています。フレームで返されたNSRectをテストするために、アプリケーションのawakeFromNib:メソッドでパネルを開き、いくつかのNSRectを取得してコンソールに出力しました。 (I)パネルとの両方のコントロールが画面上に表示されている
in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344
注こと:このコードの
- (void)awakeFromNib {
NSLog(@"in awakeFromNib");
[self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
//note that it does indeed pop up and is displayed
originalFrame = [aTextView frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
originalFrame = [aButton frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
return;
}
結果がコンソールに次のようになります。ここでは
は私のawakeFromNibです; (ii)私はアウトレットが適切に接続されているという事実を知っている。なぜなら私はコントロールに物事をプログラムで行い、それを動作させることができるからだ。 (iii)インターフェイスビルダは、「サイズ&位置」のインスペクタで正しいフレームサイズを表示します。要するに、プログラムに関する他のすべてが完全に機能しています。実際にはフレームの寸法が適切に設定されていないようです。誰かが実際のフレーム情報を取得する方法を教えてもらえますか?または、少なくとも私が見ている結果を説明する?
男の子、私の顔は赤いです!ありがとう、Kailoa。 私は気が気になりませんが、これを私の後ろに置くことができてうれしいです。 – Dennis
問題ありません。超便利なマクロも追加します。 – amattn