将NSWindow调整到码头以外的位置

时间:2013-06-24 11:41:09

标签: objective-c macos nswindow

我正在尝试将NSWindow调整到一定的大小:

NSRect frame = [_window frame];

frame.size.width = 1024;
frame.size.height = 768 + 42; // add 42 for window frame

[_window setFrame: frame display: YES];
[_window center];

调整后的高度总是在Mac OS X应用程序底座上剪裁,所以在我的情况下,窗口高度内的视图不会是768而是680.有没有办法强制它在底座之外调整大小?

1 个答案:

答案 0 :(得分:2)

通过实现一个子类来覆盖constrainFrameRect:toScreen:

来解决这个问题
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
{
    return frameRect;
}

来自Mac Developer Library,NSWindow Class Reference,constrainFrameRect:toScreen:

如果窗口可调整大小且窗口高度大于屏幕高度,则调整矩形的高度以适应屏幕。矩形的宽度和水平位置不受影响。您不应该自己调用此方法;每当标题为NSWindow的对象放置在屏幕上并且每当其大小发生变化时,它都会被自动调用(并且修改后的帧用于定位和设置窗口的大小)。 子类可以覆盖此方法,以防止其实例受到约束或以不同方式约束它们。