我有一个使用
NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
的状态菜单。我正在移植一个具有许多视图和状态属性的 MenuBarExtra。我想避免使用 NSMenuItem
,因为我依赖于我正在移植的 SwiftUI 视图中的 ObservedObject
。状态菜单本身由 class StatusItemManager: ObservableObject
管理。
let statusItem: NSStatusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
...
let statusMenuContent = NSHostingView(rootView: MyViewWithButtons())
statusMenuContent.frame = NSRect(x: 0, y: 0, width: 200, height: 200)
menuItem.view = statusMenuContent
menu.addItem(menuItem)
这是它的“要点”,但我可以发布更多代码。这更多的是一个知识问题,关于 SwiftUI 是否提供了一些东西来完成我所要求的事情,或者我是否必须使用 menu.addItem 为我拥有的每个视图手动完成它。
我所看到的:
我想要什么(之前使用 MenuBarExtra 的行为)。
你不需要
NSMenu
。MyViewWithButtons
身体包裹在SwiftUI的Menu
中,一切都会有菜单风格。
struct MyViewWithButtons: View {
// your existing code
var body: some View {
Menu {
// your existing view code
}
}
}