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

SwiftUI macOS中如何阻止Menu内的Picker被自动折叠为子菜单

问题原因

macOS 平台的 SwiftUI 对 Menu 内的 Picker 有默认适配逻辑,会自动将 Picker 的所有选项折叠为子菜单,属于系统默认行为。另外你当前代码中 Picker 内部嵌套 Button 属于错误用法,Picker 选项只需提供 Text 搭配 tag 即可,无需额外添加 Button,选择事件会自动绑定到 selection 变量。

解决方案1:指定 Picker 样式(推荐,适配 macOS 13+)

给 Picker 添加 .pickerStyle(.inline) 修饰符即可阻止系统自动折叠,直接将选项平铺在当前菜单中:

Menu("Budgets") {
    Picker("Budgets", selection: $account) {
        Text("Personal").tag(1)
        Text("Business").tag(2)
    }
    .labelsHidden()
    .pickerStyle(.inline) // 关键修饰符,禁止折叠为子菜单
                
    Divider()
                
    Button("New Budget…") {}
    Button("Manage Budgets…") {}
}

解决方案2:手动实现单选逻辑(兼容 macOS 12 及更低版本)

如果需要兼容旧版本系统,可以放弃使用 Picker,手动实现带勾选状态的单选按钮,完全自定义显示逻辑,不会触发系统自动折叠:

Menu("Budgets") {
    // 手动实现单选选项
    Button {
        account = 1
    } label: {
        if account == 1 {
            Label("Personal", systemImage: "checkmark")
        } else {
            Text("Personal")
        }
    }
    
    Button {
        account = 2
    } label: {
        if account == 2 {
            Label("Business", systemImage: "checkmark")
        } else {
            Text("Business")
        }
    }
                
    Divider()
                
    Button("New Budget…") {}
    Button("Manage Budgets…") {}
}

内容的提问来源于stack exchange,提问作者Roman Banks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:48:02