NSWindow 在每个应用程序的前面和菜单栏的前面 Objective-c Mac

Posted

技术标签:

【中文标题】NSWindow 在每个应用程序的前面和菜单栏的前面 Objective-c Mac【英文标题】:NSWindow in front of every app and in front of the menu bar Objective-c Mac 【发布时间】:2012-11-04 18:43:35 【问题描述】:

如何让我的 NSWindow 出现在每个应用程序和菜单栏的前面?我也不想在我的窗口上有一个标题栏。只是一个没有停靠菜单栏的全屏应用程序,而不是苹果的全屏模式。 我可以让我的窗口高于所有其他应用程序并像这样停靠:

[window setLevel:kCGPopUpMenuWindowLevel];

但它没有覆盖 mac 菜单栏。

【问题讨论】:

你能把它移到菜单栏后面吗?或者你不能把它移到高于菜单栏的位置吗? @DrummerB 我无法将它移到菜单栏前面的菜单栏后面。菜单栏就像一个障碍。 【参考方案1】:

您不能将默认窗口移动到高于菜单栏的位置,因为它受到限制。您必须继承 NSWindow 并覆盖 constrainFrameRect:toScreen:

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

【讨论】:

如何子类化一个 NSWindow? The Objective-C Programming Language 粘贴到哪里?你继承了 NSWindow 吗?【参考方案2】:

将窗口级别设置为NSMainMenuWindowLevel + 2

如果您使用NSMainMenuWindowLevel + 1,顶部菜单栏有时仍会出现,但非常难以预测。 NSMainMenuWindowLevel + 2 强制它停留在菜单栏上方并永久保持焦点。

[window setLevel:NSMainMenuWindowLevel + 2];

【讨论】:

【参考方案3】:

在 Swift 3 中:

window.level = Int(CGWindowLevelForKey(.mainMenuWindow)) + 2

【讨论】:

以上是关于NSWindow 在每个应用程序的前面和菜单栏的前面 Objective-c Mac的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSWindow 带到前面和当前空间?

如何使 NSWindow 阻止其他 Windows?

在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃

关闭 NSWindow 后无响应的 UI 元素

带有多个菜单栏的 Win32 中的 Windows 应用程序?

在 Qt 应用程序菜单栏的主菜单中添加和本地化菜单项