0

Mac アプリケーションでウィンドウを送信すると、次のように表示されます。

    NSRect frame = sender.window.frame;
NSLog(@"\nHeight and width of window frame: (%f,%f).\nThe x and y origin of the window frame: (%f,%f). ", frame.size.height, frame.size.width, frame.origin.x, frame.origin.y);
frame.origin.y -= 22;
frame.size.height += 22;
[sender.window setFrame:frame display:YES animate:NO];

長く伸びているように見えますが、どの UI 要素 (ボタン) も、ウィンドウにスペースが増えたことを認識していません。彼らは開かれた新しいスペースに移動することはできません。

ウィンドウのボタンのすぐそばにあるはずのボタンがいくつかあります。これらをまとめるために、上記のコードと組み合わせて次のコードを使用します。

CGRect quitBF = quitButton.frame;
quitBF.origin.y -= 5; // new y coordinate
quitButton.frame = quitBF;
CGRect loadBF = loadButton.frame;
loadBF.origin.y -= 5; // new y coordinate
loadButton.frame = loadBF;
CGRect saveBF = saveButton.frame;
saveBF.origin.y -= 5; // new y coordinate
saveButton.frame = saveBF;
CGRect resetBF = resetButton.frame;
resetBF.origin.y -= 5; // new y coordinate
resetButton.frame = resetBF;

しかし、窓の古い寸法にぶつかると、消え始めます。窓も長く見える。ありがとうございました。

編集: ウィンドウ自体の自動サイズ変更を調べました。問題の認識は、ウィンドウ内の NSView に関係しています。そのビューにはすべての UI 要素が含まれており、ウィンドウが変更されても変更されないように見えます。唯一の問題は、ビューを上からではなく下から拡張する方法がわからないことです。(トップを大きくして原点をずらしても、UI 要素はすべて NSView と一緒に移動するため、うまくいきません)。

4

2 に答える 2

1

問題はおそらく、自動サイズ設定をどのように設定するかです。トップストラットのみをアクティブにすると、希望どおりに動作するはずです

于 2012-04-06T05:20:07.740 に答える
0

ビューの原点がウィンドウの動きに追いついていなかったため、ボタンが消えていました。以下は、ウィンドウとビューを一緒にシームレスに移動するようにします...適切にリンクを設定しなかったため、そのままで正常に動作します:

    [mainWindow disableScreenUpdatesUntilFlush];
[mainWindow disableFlushWindow];

NSRect frame = sender.window.frame;
NSRect viewFrame = mainView.frame;

viewFrame.size.height += 25;
frame.size.height += 25;
frame.origin.y -= 25;

[sender.window setFrame:frame display:YES animate:NO];
mainView.frame = viewFrame;

[mainWindow enableFlushWindow];
于 2012-10-05T03:56:59.260 に答える