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

tvOS中SwiftUI Menu在Toolbar无法展开的问题及求解决方案

tvOS SwiftUI Toolbar中Menu无法展开的解决办法

问题说明

在tvOS环境下使用SwiftUI的Menu组件时,将其直接放置在Toolbar内会出现点击无法展开子菜单的异常,而在Toolbar外使用时功能完全正常。该问题已通过反馈编号FB16853917提交给苹果。

可行解决办法

目前有两种经过验证的临时修复方案:

方案1:用ToolbarItem包裹并调整按钮样式

将Menu放入ToolbarItem中,并为其添加PlainButtonStyle,确保tvOS的焦点交互逻辑正常触发:

struct ContentView: View {
    var body: some View {
        NavigationStack {
            VStack {
                MyMenu()
            }
            .padding()
            .toolbar {
                ToolbarItem(placement: .primaryAction) {
                    MyMenu()
                        .buttonStyle(PlainButtonStyle())
                }
            }
        }
    }
}

方案2:自定义按钮+弹窗模拟Menu行为

如果方案1无效,可以通过Button结合Popover手动实现菜单逻辑,完全规避原生组件的bug:

struct CustomToolbarMenu: View {
    @State private var showMenu = false
    
    var body: some View {
        Button("Test Menu") {
            showMenu.toggle()
        }
        .popover(isPresented: $showMenu) {
            VStack(spacing: 24) {
                Button("Sub 1") {
                    print("action 1")
                    showMenu = false
                }
                Button("Sub 2") {
                    print("action 2")
                    showMenu = false
                }
            }
            .padding()
            .frame(width: 320)
        }
    }
}

// 在Toolbar中调用:
.toolbar {
    CustomToolbarMenu()
}

补充说明

以上方案均为针对当前tvOS SwiftUI已知bug的临时替代方案,待苹果修复编号FB16853917的问题后,即可恢复原生Menu组件的正常用法。

内容的提问来源于stack exchange,提问作者Cameron Little

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:16:05