【发布时间】:2012-10-14 17:31:06
【问题描述】:
我有一个 NSWindow,它位于 NSStatusItem 的位置。
窗口可以使用它自己的方法setSize: 来改变它的大小,这样就可以得到正确的窗口框架:
- (NSRect)frameForSize:(NSSize)size {
NSRect newFrame = self.frame;
newFrame.origin.x += (newFrame.size.width - size.width) / 2;
newFrame.origin.y += (newFrame.size.height - size.height);
newFrame.size = size;
return newFrame;
}
如果宽度发生变化,这允许窗口保持居中。
我可以使用代码轻松调用它,但是当我使用窗口边缘调整它的大小时,直接调用 setFrame:display:。
有一个委托方法windowDidResize:notification:,但是如果我在那里设置框架,它会被设置两次并且它会滞后。
在实际调整窗口大小之前是否有一个事件被调用? 如果没有,我该怎么做?
【问题讨论】:
-
您是否尝试过继承
NSWindow并覆盖setFrame:display:以保持窗口居中? -
我已经对窗口进行了子类化,问题是在这种情况下我无法设置原点。
-
见我的answer below。您可以设置原点,因为您将使用新尺寸的正确(居中)原点在
super上调用setFrame:display:。
标签: objective-c xcode macos cocoa nswindow