调整NSWindow的大小以适应儿童NSView

时间:2012-04-16 16:20:57

标签: objective-c cocoa nswindow

我有一个主要的NSWindow是空的,还有5个NSView。 NSView具有不同的按钮和标签等,窗口为空。显示的第一个视图是一个菜单,链接到其他视图并返回。这样工作正常,视图切换良好。

然而,如果NSWindow是一定规模,并且NSView更大,那么它会从NSWindow溢出并被切断。

当我这样做时,有没有办法:

[_window setContentView: theNewView];

还要_window调整大小以适应新视图?如果可以,可以用动画完成吗?

1 个答案:

答案 0 :(得分:14)

-[NSWindow setContentSize:]这样做(没有动画)。为其提供所需的内容视图大小,它将适当地调整内容视图和窗口的大小,例如

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

对于动画,您需要使用frameRectForContentRect:手动计算窗口大小,然后使用animate:YES更改窗口的框架:

[_window setContentView:theNewView];
NSRect viewScreenFrame = /*translate theNewView.frame to screen coordinates*/;
NSRect wndFrame = [_window frameRectForContentRect:viewScreenFrame];
[_window setFrame:wndFrame display:YES animate:YES];