【问题标题】:How do I hide default CommandMenu in SwiftUI on macOS?如何在 macOS 上的 SwiftUI 中隐藏默认 CommandMenu?
【发布时间】:2020-12-09 01:20:11
【问题描述】:

我正在(尝试)将我的 AppDelegate macOS 应用程序切换到 SwiftUI 生命周期 - 但似乎无法找到如何处理 CommandMenu。我只想删除这些默认菜单项(Fie、Edit、View 等...)。过去,我只是将它们从情节提要中删除——但我在这里没有使用情节提要。有没有办法在 SwiftUI 中删除这些项目?

我要删除的项目:

我知道如何通过以下方式添加新项目:

.commands {
  MyAppMenus()
}  

但这只是将它们添加到现有菜单项中。

【问题讨论】:

    标签: swiftui macos-big-sur


    【解决方案1】:

    swiftUI -- 用您的自定义覆盖 AppDelegate:

    @main
    struct PixieApp: App {
        @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    ///........
    }
    

    appDelegate 的代码:

    final class AppDelegate: NSObject, NSApplicationDelegate {
        func applicationWillUpdate(_ notification: Notification) {
            if let menu = NSApplication.shared.mainMenu {
                menu.items.removeFirst{ $0.title == "Edit" }
                menu.items.removeFirst{ $0.title == "File" }
                menu.items.removeFirst{ $0.title == "Window" }
                menu.items.removeFirst{ $0.title == "View" }
            }
        }
    }
    

    结果:

    【讨论】:

      【解决方案2】:

      您可以通过 AppDelegate 文件删除命令菜单项:

      override func buildMenu(with builder: UIMenuBuilder) {
          super.buildMenu(with: builder)
          builder.remove(menu: .services)
          builder.remove(menu: .format)
          builder.remove(menu: .toolbar)
      }
      

      Apple 开发者论坛上的这个帖子也可能会有所帮助:https://developer.apple.com/forums/thread/649096

      【讨论】:

      • 如果我使用的是 Catalyst 但我没有使用,这会起作用 - UIMenuBuilder 在 macOS 上不可用。
      • @JoeBayLD 哦,对不起
      【解决方案3】:
      CommandGroup(replacing: CommandGroupPlacement.appVisibility, addition: {})
      

      【讨论】:

      • 请你开发你的答案?
      • 您能否添加一些解释为什么/如何解决 OP 的问题。
      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多