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

Swift中NavigationLink重复跳转及废弃API替代方案咨询

SwiftUI 4+官方推荐两种现代替代方式:

  1. NavigationPath路径管理:适合复杂导航栈,通过状态对象记录跳转路径,灵活可控。
  2. NavigationLink(value:) + .navigationDestination(for:):适合简单跳转,通过值绑定触发导航。

以下是结合两种问题的完整修复代码:

import SwiftUI

// 定义导航目标枚举,统一管理跳转类型
enum NavTarget {
    case thirdView
}

struct TestView: View {
    @State private var showActionSheet = false
    // 使用NavigationPath管理导航栈状态
    @State private var navPath = NavigationPath()
    
    var body: some View {
        VStack {
            ForEach(["1", "2", "3"], id: \.self) { option in
                HStack {
                    Text(option)
                    Button(action: {
                        showActionSheet = true
                    }) {
                        Image(systemName: "ellipsis")
                            .padding()
                    }
                }
            }
        }
        // 将sheet修饰符应用在容器上,避免重复创建
        .sheet(isPresented: $showActionSheet) {
            actionSheetContent()
        }
        // 注册导航目标,关联枚举类型
        .navigationDestination(for: NavTarget.self) { target in
            switch target {
            case .thirdView:
                ThirdView()
            }
        }
    }
    
    private func actionSheetContent() -> some View {
        Button(action: {
            // 先关闭sheet,再推入新视图
            showActionSheet = false
            navPath.append(NavTarget.thirdView)
        }) {
            Text("Go to 3rd View")
                .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
        .presentationDetents([.fraction(0.1)])
        .padding()
    }
}

struct ThirdView: View {
    var body: some View {
        Text("ThirdView")
    }
}

#Preview {
    NavigationStack {
        TestView()
    }
}

代码关键点说明

  • 容器包裹ForEach:确保.sheet和导航逻辑只被初始化一次,避免重复添加导航链接。
  • NavigationPath管理栈:通过navPath.append()触发跳转,栈状态清晰可控,不会出现重复推入的问题。
  • 枚举化导航目标:统一管理所有跳转类型,后续扩展新页面只需添加枚举值,代码更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:05:21