【问题标题】:How do you hide the menu bar in a Cocoa app?如何在 Cocoa 应用程序中隐藏菜单栏?
【发布时间】:2013-12-26 06:04:56
【问题描述】:

如何以编程方式隐藏可可应用程序中的菜单栏?我想充分利用屏幕区域。

【问题讨论】:

  • 你说的是状态栏吗?
  • 有点。这是菜单栏的一部分。
  • 转到您的项目名称.plist 文件集查看基于控制器的状态栏外观 = NO
  • 这是 LSUIElement 键

标签: objective-c cocoa menubar dock nsmenu


【解决方案1】:

我知道有两种好方法可以做到这一点。

1 在Cocoa中,可以调用NSMenu类方法setMenuBarVisible:来显示或隐藏菜单栏。

在撰写本文时,NSMenu 类的文档没有告诉您以下附加信息。

只有调用此方法的应用才会隐藏菜单栏。 Dock 将同时被隐藏。

(至少在 10.9 中是这样,我还没有测试任何其他版本。)

当您想以全屏方式使用应用程序时,这很有用,您有一个覆盖窗口,一个屏幕大小的无边框窗口。 这样做的好处(与使用 LSUIElement 设置相反)是您的应用程序可以继续处于应用程序切换器循环中,并且在其他应用程序处于活动状态时在 Dock 中可见。 这允许用户仍然通过 Dock 或应用程序切换器激活全屏应用程序。 这意味着您仍然可以使用您的应用程序的 Dock 菜单来访问您的应用程序或其他功能的首选项窗口。 如果您的应用程序确实是一个全屏覆盖窗口,并且运行在比其他应用程序更高的窗口级别,那么这将非常方便,但是您仍然希望使首选项和退出应用程序的能力可用,并且您希望应用程序的视觉功能在以下情况下可用其他应用程序处于活动状态。

2 另一种选择是通过NSApplication 的方法setPresentationOptions: 使用来自NSApplicationPresentationOptions 枚举的参数,例如选项NSApplicationPresentationHideMenuBar 使用这种方法阅读文档时要非常小心,尽管它为您提供了额外的选项,并且仍然是特定于应用程序的,但您需要知道某些选项是互斥的。您必须遵守一些规则,否则您只会得到控制台中的异常。

3 有第 3 个糟糕的选项。如果您有一个作为守护程序的辅助应用程序,您可以使用它来更改您的应用程序的 LSUIElement 状态并基本上重新启动您的应用程序。这很愚蠢,它会让你完全脱离应用程序切换器,如果你真的在写一些不应该在那里的东西,那就太好了,但这种情况很少见。

【讨论】:

  • 全屏机制不止一种。覆盖窗口与使用 NSWindow 全屏方式不同。
【解决方案2】:

还有 NSView enterFullScreenMode:withOptions: 方法,尽管在 10.7 之前适用的大多数应用程序可能应该在 10.7 及更高版本上使用现代全屏窗口 API。

【讨论】:

  • 同意 NSWindow API。尽管菜单栏必须与停靠栏具有相同的设置,但我仍然有点恼火。主要是用户通知中心和启动板可用的私有功能不公开。我构建了类似于用户通知中心的东西,但尝试使用公共 API 获得类似的东西似乎很困难或不可能,其中活动应用程序的菜单栏保持活动状态,而 Dock 和“主显示器”在移动时仍然保持视觉活动.显然,Apple 有自己的钩子连接到那里的私人窗口或图形上下文。:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多