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

iOS16中NavigationStack用navigationDestination跳转不同视图异常解决

问题原因

你推测的完全正确——问题出在两个navigationDestination都绑定了String.self类型。SwiftUI中,同一类型的navigationDestination会被后续添加的覆盖,最终只有最后一个生效,所以无论点击哪个NavigationLink,都会跳转到Link2视图。

解决方法

方法一:用自定义枚举区分跳转类型(推荐)

通过定义一个符合Hashable协议的枚举,把不同跳转目标封装成枚举case,让每个NavigationLink的value对应不同枚举值,这样就能精准匹配跳转视图。

import SwiftUI

// 定义枚举区分不同跳转场景
enum NavTarget: Hashable {
    case link1
    case link2
}

struct NavTest: View {
    var body: some View {
        NavigationStack {
            NavigationLink("Link1", value: NavTarget.link1)
            NavigationLink("Link2", value: NavTarget.link2)
                
                .navigationDestination(for: NavTarget.self) { target in
                    switch target {
                    case .link1:
                        Link1()
                    case .link2:
                        Link2()
                    }
                }
        }
    }
}

struct NavTest_Previews: PreviewProvider {
    static var previews: some View {
        NavTest()
    }
}

struct Link1: View {
    var body: some View{
        Text("You are in Link1 view")
    }
}

struct Link2: View {
    var body: some View{
        Text("You are in Link2 view")
    }
}

这种方式扩展性强,后续新增跳转目标只需在枚举里加case,代码更易维护。

方法二:在同一String类型的navigationDestination中判断值

如果不想新增枚举,也可以保留String类型的value,只写一个navigationDestination,根据传入的字符串值判断跳转视图:

import SwiftUI

struct NavTest: View {
    var body: some View {
        NavigationStack {
            NavigationLink("Link1", value: "Link-1")
            NavigationLink("Link2", value: "Link-2")
                
                .navigationDestination(for: String.self) { txtValue in
                    if txtValue == "Link-1" {
                        Link1()
                    } else if txtValue == "Link-2" {
                        Link2()
                    }
                }
        }
    }
}

// 其余视图代码不变

这种方式适合简单场景,但如果跳转字符串增多,代码会变得臃肿且容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:57:27