tvOS中SwiftUI Menu在Toolbar无法展开的问题及求解决方案
问题说明
在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
相关产品推荐
相关产品推荐

