swiftUI笔记之MenuBarExtra实践(mac应用)
背景
最近在推进我的一款mac应用产品,需使用到menuBar,以前都使用swift appDelegate,现在使用新的MenuBarExtras验证下。
实践
在 macOS 13 Ventura 中,Apple 终于提供了一种实现MenuBarExtras
SwiftUI 方式的方法。它首次在 WWDC 演讲“为您的 SwiftUI 应用程序带来多个窗口”中引入,并使在 Swift UI 中编写实用程序应用程序变得轻而易举。
现在MenuBarExtras可以直接将您的应用程序主体与您的Windows或WindowGroups.
1 | @main |
MenuBarExtras
大多数时候采用三个参数:
TitleKey
: 标识它的字符串。很可能是您的应用程序的名称Image
:菜单栏中显示的符号。最好是,一个SFSymbol。通过这种方式,您可以开箱即用地获得浅色和深色主题行为。Content
: 这几乎可以是任何东西。不过,这取决于所选样式的呈现方式。
有两种预定义样式MenuBarExtras
:
菜单
两者中较容易的是.menu。它是默认样式,将 Menu Bar Extra 的内容呈现为标准菜单。
1 | @main |
当然你也可以显性的使用 .menuBarExtraStyle(.menu)
窗户
窗口样式允许您将任何类型的内容呈现到的MenuBarExtra
弹出窗口中,并且可用于需要更多自定义控件(如滑块或开关)的应用程序。
为了启用窗口样式,将.menuBarExtraStyle修饰符添加到MenuBarExtra并将其设置为.window。
1 | @main |
从 Dock 隐藏应用程序
如果您的应用仅包含一个MenuBarExtra并且不需要额外的窗口,您可以WindowGroup完全删除该窗口。在这些情况下,您很可能也不希望您的应用出现在 Dock 中。
这可以通过UIElement在您的应用程序的info.plist. 代理应用程序不会出现在用户的 Dock 中。