NSWindow没有调整大小以适应NSView - SOMETIMES?

时间:2012-04-16 21:17:16

标签: objective-c xcode cocoa

我无法调整NSWindow的大小以适应NSView。它必须是一个逻辑错误,因为它可以工作但不能用于一个动作。

我有一个空的NSWindow,以及3个不同大小的NSView。

使用以下代码我调整NSWindow的大小以适应NSView并显示它:

[_window setContentSize:_mainView.frame.size];
[_window setContentView:_mainView];

此代码工作正常。

但是在一个NSView中我有一个Back按钮,虽然它在NSWindow中显示正确的NSView,但它不会重新调整大小。作为一个例子,初始窗口是一定的大小,我点击切换到另一个视图,它正确调整大小,我按后退按钮,显示NS​​View但窗口保持相同的大小?

有人可以向我解释为什么当我切换回原来的NSView时,它不会调整NSWindow的大小吗?

先谢谢大家。这是我的完整代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [_window setContentSize:_mainView.frame.size];
    [_window setContentView:_mainView];
}

- (IBAction)switchSubtractionView:(id)sender {
    [_window setContentSize:_subtractionView.frame.size];
    [_window setContentView:_subtractionView];
}

- (IBAction)switchAdditionView:(id)sender {
    [_window setContentSize:_additionView.frame.size];
    [_window setContentView:_additionView];
}

// -----------------------------------------------------------------------
// THE FOLLOWING METHOD DISPLAYS THE NEW VIEW CORRECTLY BUT DOESN'T RESIZE
// -----------------------------------------------------------------------
- (IBAction)switchMainMenu:(id)sender {
    [_window setContentSize:_mainView.frame.size];
    [_window setContentView:_mainView];
}

先谢谢大家。

编辑:在我看来,在获取VIEW.frame.size时,如果重复使用它,它会丢失其值?这对我来说似乎很奇怪?

1 个答案:

答案 0 :(得分:3)

窗口的内容视图必须始终调整大小以填充窗口的内容区域。因此,在设置窗口的内容大小时,可以有效地更改当前内容视图的大小。这恰好在您切换内容视图之前发生,因此您要更改旧视图的大小。

尝试在更改内容大小之前将内容视图设置为新的一次性NSView,然后设置新的内容视图。