移动窗框而不在Objective-C中移动其内容

时间:2012-10-03 22:13:21

标签: objective-c window frame

我有(+)和( - )按钮......(+)按钮应该使窗口向下延长,而( - )按钮应该撤消(+)按钮的作用,通过制作它从底部较短。

关键是,框架应该只从底部伸展,大多数UI项目应该保持原位 - 窗口底部有按钮,应该跟随窗口高度的变化... < / p>

问题是我正在使用它来移动窗口并维持其内容的相同位置......

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;

但是说你单击(+)按钮一次;框架变长时,所有项目都略微向上移动。如果在第一次按下后连续单击(+),它将按预期运行:框架将向下移动,其内容将保持不变。 如果您再单击( - )按钮一次;当框架缩短时,所有项目都会略微向下移动。在第一次按下后连续单击( - ),它将按预期移动框架。

第一次按下按钮似乎会移动所有窗口内容,而连续按下按预期运行...我想知道我是否在XCode的界面编辑器中遗漏了一些关于自动调整的内容。谢谢。

2 个答案:

答案 0 :(得分:0)

假设mainView是窗口中的主视图,则不应手动修改其框架。只要你正确配置了弹簧和支柱(或约束),它就应该随窗口自动调整大小。

答案 1 :(得分: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使它同时无缝地发生。