【问题标题】:Resizing NSWindow beyond the dock调整 NSWindow 超出扩展坞的大小
【发布时间】:2013-06-20 21:48:39
【问题描述】:

我正在尝试将 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。有没有办法强制它调整超出停靠点的大小?

【问题讨论】:

  • 这是标准的 OS X 行为。问问自己为什么需要覆盖它。用户想正常的时候做如下操作:点击dock、隐藏dock、进入全屏

标签: objective-c macos nswindow


【解决方案1】:

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

- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
{
    return frameRect;
}

来自 Mac 开发者库,NSWindow 类参考,constrainFrameRect:toScreen:

如果窗口可以调整大小并且窗口的高度大于屏幕高度,则矩形的高度也会调整为适合屏幕。矩形的宽度和水平位置不受影响。您不需要自己调用此方法;每当一个标题为 NSWindow 的对象被放置在屏幕上并且它的大小改变时,它就会自动调用(并且修改的框架用于定位和设置窗口的大小)。 子类可以重写此方法以防止它们的实例受到约束或以不同方式约束它们。

【讨论】:

    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多