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

更新Xcode 12.5后部分Navigation Links跳转后立即返回故障

问题原因

这是Xcode 12.5配套的iOS 14.5 SDK中的已知Bug,由NavigationStack状态管理逻辑变更导致,当父视图发生随机重绘时,NavigationLink绑定的selection值会被意外重置,触发自动返回上一级的行为。

解决方案
  • 调整NavigationLink的嵌套层级,不要将其放在HStack、ZStack等子容器内部,统一放到导航栈根视图的最外层,避免子容器重绘时影响NavigationLink的状态识别
  • 给所有NavigationLink添加.isDetailLink(false)修饰符,iOS 14.5中修改了split view模式下的默认页面跳转逻辑,该修饰符可以强制页面以push方式进入当前导航栈,避免被系统识别为详情页自动回收
  • 替换selection的存储载体,不要使用视图内的局部@State属性存储selection值,改用@StateObject或者全局@ObservedObject对象中的属性存储,避免局部状态在视图重绘时被意外清空
  • 临时兼容方案可以将tag+selection的调用方式替换为isActive绑定方式,每个跳转路径对应独立的Bool状态变量,该方式在iOS 14.5版本中出现异常跳转的概率极低
修正后代码示例
NavigationView {
    VStack {
        // 原有业务视图
        HStack {
            ZStack {
                Button("") {
                    self.selection = "Hole11"
                }.buttonStyle(ButtonNavigate())
                                    
                Text("Go To Hole No \(course.hole11no)")
                .foregroundColor(ColorManager.Purple)
                .font(.system(size: 16, weight: .bold, design: .rounded))
            }
        }
        // NavigationLink移至最外层,添加修饰符
        NavigationLink(destination: AllM4Hole11View(scoreManager: scoreManager, course: course), tag: "Hole11", selection: $selection) { 
            EmptyView() 
        }
        .isDetailLink(false)
    }
    .navigationBarBackButtonHidden(true)
    .navigationBarItems(leading: Button(action: {
         self.mode.wrappedValue.dismiss()
    }){
     Text("<< Back To Hole No \(course.hole10no)")
         .foregroundColor(ColorManager.Purple)
    })
}
补充说明

该问题在Xcode 13及更高版本配套的iOS 15+ SDK中已经被官方修复,如果项目最低兼容版本可以升级到iOS 15,直接更新开发工具即可彻底解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 10:15:04