如何在不使用菜单的情况下获取 SwiftUI 中视图的菜单样式?

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

我有一个使用

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 为我拥有的每个视图手动完成它。

我所看到的:

SwiftUI View Status Menu with NSStatusBar

我想要什么(之前使用 MenuBarExtra 的行为)。

SwiftUI View Status Menu with MenuBarExtra

swift macos nsmenu nsstatusitem nsstatusbar
1个回答
0
投票

你不需要

NSMenu

将你的
MyViewWithButtons
身体包裹在SwiftUI的
Menu
中,一切都会有菜单风格。

struct MyViewWithButtons: View {

// your existing code 

    var body: some View {
        Menu {
             // your existing view code
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.