You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mac Catalyst应用中使用UIMenuBuilder添加菜单栏新菜单?

Mac Catalyst下UIMenuBuilder自定义菜单栏不显示问题

使用UIMenuBuilder可在iPadOS上构建类似macOS的传统菜单栏:既可为Edit等系统标准菜单添加带快捷键的命令,也能创建自定义菜单并插入到现有菜单之后。该逻辑在iPadOS上完全正常,但在Mac Catalyst应用中存在限制——仅能为Edit菜单添加菜单项,自定义菜单无法在macOS菜单栏中显示。

当前实现情况:

  • 已为Edit菜单添加Search选项,该功能在iPadOS和macOS上均可正常触发
  • 在Edit菜单后添加了包含Favorite选项的Image菜单,此菜单在iPadOS上正常显示,但在macOS菜单栏中缺失

实现代码

override func buildMenu(with builder: UIMenuBuilder) {
    super.buildMenu(with: builder)
    
    guard builder.system == .main else { return }
    
    let editMenu = UIMenu(options: .displayInline, children: [
        UIKeyCommand(title: "Search", action: #selector(search), input: "F", modifierFlags: .command)
    ])
    builder.insertChild(editMenu, atStartOfMenu: .edit)
    
    let imageMenu = UIMenu(title: "Image", options: .displayInline, children: [
        UIKeyCommand(title: "Favorite", action: #selector(toggleFavorite), input: ".")
    ])
    builder.insertSibling(imageMenu, afterMenu: .edit)
}

@objc func search() {
    print("search")
}

@objc func toggleFavorite() {
    print("favorite")
}

效果截图

  • iPadOS显示效果:iPadOS菜单栏,Edit菜单后可见Image菜单
  • macOS显示效果:macOS菜单栏,仅显示Edit菜单,无Image菜单

内容的提问来源于stack exchange,提问作者Jordan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:06:29