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

问题描述 投票:0回答:4

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

[window setLevel:kCGPopUpMenuWindowLevel];

但它没有覆盖 mac 菜单栏。

objective-c macos window nswindow menubar
4个回答
7
投票

您无法将默认窗口移至高于菜单栏的位置,因为它受到限制。你必须继承 NSWindow 并覆盖

constrainFrameRect:toScreen:

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

2
投票

将窗位设置为

NSMainMenuWindowLevel + 2

如果您使用

NSMainMenuWindowLevel + 1
,顶部菜单栏有时仍会出现,但非常不可预测。
NSMainMenuWindowLevel + 2
强制其停留在菜单栏上方并永久保持焦点。

[window setLevel:NSMainMenuWindowLevel + 2];

2
投票

在 Swift 3 中:

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

0
投票

在 Swift 5 中:

window.level = .screenSaver

© www.soinside.com 2019 - 2024. All rights reserved.