SwiftUI:ControlGroup内嵌套NavigationLink无响应问题咨询
问题场景与代码
在ControlGroup内嵌套NavigationLink实现页面跳转时出现交互失效,代码示例如下:
ControlGroup { NavigationLink(destination: BranchView(branches: mockBranches)) { Button("Branches") { print("clicked") } } // 其他同类导航项 }
异常表现
- Button点击无动画反馈,
print语句完全不执行 - 将Button替换为Text后问题仍未解决
- 相同代码移出
ControlGroup后可正常运行
问题根源
该问题源于SwiftUI导航组件的版本迁移:旧的NavigationView已被NavigationStack/NavigationSplitView等新导航类型取代,原NavigationLink直接指定destination的写法,在新导航体系下与ControlGroup组合会触发交互冲突,导致点击事件无法正常传递。
修复方案
适配新的导航API,调整代码结构:
方案1:使用新的NavigationLink+navigationDestination
NavigationStack { ControlGroup { NavigationLink("Branches", value: mockBranches) } .navigationDestination(for: [Branch].self) { branches in BranchView(branches: branches) } }
方案2:保留Button自定义逻辑,用NavigationPath控制跳转
如果需要保留Button的自定义点击逻辑(比如打印日志),可以通过NavigationPath手动管理导航栈:
@State private var navigationPath = NavigationPath() NavigationStack(path: $navigationPath) { ControlGroup { Button("Branches") { print("clicked") navigationPath.append(mockBranches) } } .navigationDestination(for: [Branch].self) { branches in BranchView(branches: branches) } }
内容的提问来源于stack exchange,提问作者Roy Falk
相关产品推荐
相关产品推荐

