Cocoa最大化事件以调整内容大小

时间:2012-06-28 22:22:04

标签: ios cocoa resize zoom nswindow

我有NSWindow并已实施windowWillResize

在这个方法中,我有一些代码可以调整窗口的内容。它很棒。

但是当用户想要使用绿色加号按钮(在标题栏中)最大化(缩放)窗口时,窗口会增长,但不会调用windowWillResize

我尝试过实施windowShouldZoom方法。调用该方法但此时我无法获取窗口大小。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

windowWillResize:toSize:之类的通知实际上更多的是用于约束窗口,例如对于可能希望在特定边界上对齐窗口的图像查看器。框架可以在不调用通知的情况下进行更改(例如setFrame:display:),因此依靠这样的回调来进行布局是不好的。

考虑创建一个NSView子类,它是您要安排的视图的父级,然后在视图级别实现resizeSubviewsWithOldSize:等方法。这也有一个优点,你可以保持子树中包含的布局逻辑:也许有一天你决定使用整个窗口不一定需要视图(例如用户控制的侧边栏显示/隐藏),这样“主”窗口区域可以神奇地使用它给出的任何空间来进行布局。

请注意,使用NSView作为调整大小的基础并不意味着窗口状态不可用;例如,视图可以检测窗口是否已经开始或结束“实时调整大小”并相应地优化布局。