调整NSWindow大小以适应子NSView

5

我有一个主NSWindow,它是空的,还有5个NSViews。这些NSViews具有不同的按钮和标签等内容,而窗口则为空。第一个显示的视图是菜单,链接到其他视图和返回。这很好用,视图切换得很好。

但是,如果NSWindow是特定大小,而NSView更大,则NSView会溢出NSWindow并被切断。

是否有任何方法可以在执行以下操作时:

[_window setContentView: theNewView];

是否可以同时调整 _window 的大小以适应新的视图?如果可能,能否在动画效果下完成?

1个回答

19

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

运行得非常出色。我到处寻找,却什么都没找到,然而答案是如此简单。谢谢! - Cristian
你能告诉我如何将视图转换为坐标吗? - Cristian
1
我搞定了 - http://www.cocoabuilder.com/archive/cocoa/162049-flipping-over-coordinate-conversion.html 再次感谢! - Cristian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接