NavigationLink isActive 已弃用

Ste*_*rot 18 swiftui swiftui-navigationlink

在新版本的iOS和Xcode中

NavigationLink(isActive: , destination: , label: ) 
Run Code Online (Sandbox Code Playgroud)

已弃用。

那么我们如何控制NavigationLink的状态呢?

小智 48

旧的/已弃用的导航方式:

    @State private var readyToNavigate : Bool = false

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: MyTargetView(), isActive: $readyToNavigate, label: {Text("Navigate Link")})
                
                Button {
                    //Code here before changing the bool value
                    readyToNavigate = true
                } label: {
                    Text("Navigate Button")
                }
            }
            .navigationTitle("Navigation")
        }
    }
Run Code Online (Sandbox Code Playgroud)

新的导航方式 - 请注意,这是使用NavigationStack而不是NavigationView

    @State private var readyToNavigate : Bool = false

    var body: some View {
        NavigationStack {
           VStack {
              Button {
                  //Code here before changing the bool value
                  readyToNavigate = true
              } label: {
                  Text("Navigate Button")
              }
          }
           .navigationTitle("Navigation")
           .navigationDestination(isPresented: $readyToNavigate) {
              MyTargetView()
          }
       }
   }
Run Code Online (Sandbox Code Playgroud)

  • **请注意,它现在使用的是“NavigationStack”,而不是“NavigationView”。这里的答案是完美的,我只是为那些忽略了新作品的人(像我一样)添加了这个注释。它与“NavigationView”和“.navigationDestination”一起编译得很好,但就是没有去任何地方,我疯狂地试图找出原因,没有意识到我的眼睛已经盯着新的“.navigationDestination”并忽略了同样新的`导航堆栈`。 (5认同)

Asp*_*eri 2

NavigationLink(value:label:)按照规定使用新的。通过输入相应的值NavigationPath即可激活链接。

请参阅本主题中的更多示例

演示