0

(+)ボタンと(-)ボタンがあります...(+)ボタンを押すとウィンドウが下方向に長くなり、(-)ボタンを押すと(+)ボタンを元に戻すことができます。下。

重要なのは、フレームは下からのみ引き伸ばされ、ほとんどのUIアイテムは所定の位置にとどまる必要があるということです。ウィンドウの下部には、ウィンドウの高さの変化に追従するボタンがあります...

問題は、これを使用してウィンドウをシフトし、その内容の同じ位置を維持していることです...

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];

NSRect viewFrame = mainView.frame;
viewFrame.origin.y -= 22;
viewFrame.size.height += 22;
mainView.frame = viewFrame;

ただし、(+)ボタンを1回クリックするとします。フレームが長くなると、すべてのアイテムがわずかに上にシフトします。最初に押した後に(+)を続けてクリックすると、期待どおりに機能します。フレームが下に移動し、その内容がそのまま残ります。次に(-)ボタンを1回クリックした場合。フレームが短くなると、すべてのアイテムがわずかに下にシフトします。最初に押した後、(-)を続けてクリックすると、フレームが期待どおりに移動します。

初めてボタンを押すとすべてのウィンドウの内容が移動し、連続して押すと意図したとおりに機能するようです...XCodeのインターフェイスエディタで自動サイズ設定について何かが足りないかどうか知りたいのですが。ありがとうございました。

4

2 に答える 2

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];

これは正常に機能します。NSViewとウィンドウをリンクできなかったので、両方を手動で移動し、disableFlushWindowを使用してシームレスに同時に実行できるようにしました。

于 2012-10-05T04:01:50.987 に答える
0

これがウィンドウのメインビューであると仮定するとmainView、フレームを手動で変更しないでください。ばねと支柱(または拘束)が適切に構成されている限り、ウィンドウに合わせて自動的にサイズが変更されます。

于 2012-10-03T22:25:24.073 に答える