如何检测返回到 SwiftUI 中 NavigationView 的根视图?

Igo*_*ich 4 ios swiftui

我看到“ContentView出现了!” 仅第一次发送消息/onAppear似乎被称为

是否有可能以任何其他方式检测返回到根目录?

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailView()) {
                    Text("Hello World")
                }
            }
        }.onAppear {
            print("ContentView appeared!")
        }.onDisappear {
            print("ContentView disappeared!")
        }
    }
}

struct DetailView: View {
    var body: some View {
        VStack {
            Text("Second View")
        }.onAppear {
                print("DetailView appeared!")
        }.onDisappear {
                print("DetailView disappeared!")
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

Moj*_*ini 7

NavigationViewviews之间是持久的。因此,它实际上不是appeardisappear当你把它们之间流行。所以,你需要设置modifier的S NavigationView的内容不是NavigationView它的自我:

NavigationView {
    NavigationLink(destination: DetailView()) { Text("Hello World") }

    .onAppear { print("ContentView appeared!") }
    .onDisappear { print("ContentView disappeared!") }
}
Run Code Online (Sandbox Code Playgroud)


Igo*_*ich 5

找到了愚蠢的解决方案,但它有效。只需添加onAppear()VStack内部根视图

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailView()) {
                    Text("Hello World")
                }
            }.onAppear {
            print("stack appeared!")
          }
        }.onAppear {
            print("ContentView appeared!")
        }.onDisappear {
            print("ContentView disappeared!")
        }
    }
}


Run Code Online (Sandbox Code Playgroud)