SwiftUI onAppear/onDisappear 在 Xcode 11.7 (11E801a) iOS 13.7 中不起作用

Hel*_*ime 4 swiftui

我已经阅读了有关该问题的现有线程,并且评论表明这是一个错误并已在 11.7 上修复,但我仍在该版本上遇到它。

总之:

当应用程序启动时,您的视图View 1会触发 onAppear。

当我使用 Navigation Controller导航到子视图(View 2)时,没有为View 1触发 onDisappear ,但为View 2触发了 onAppear 。

当您导航回View 1 时,您不会获得View 1的 onAppear 或(view 2)的 onDisappear。

当视图出现/消失时,是否有一种可靠的方法来触发事件?或者我应该尝试跳到 Xcode 测试版?

示例代码:

  import SwiftUI
    
    struct DetailView: View {
        var body: some View {
            Text("Detail view")
            .onAppear(){
                print("DetailView onAppear fired")
            }
            .onDisappear(){
                print("DetailView onDisappear fired")
            }
        }
    }
    
    
    struct ContentView: View {
        var body: some View {
            NavigationView {
                NavigationLink(destination: DetailView()) {
                    Text("Show detail view")
                }
                .navigationBarTitle("Master view")
            }
            .onAppear(){
                print("ContentView onAppear fired")
            }
            .onDisappear(){
                print("ContentView onDisappear fired")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Kar*_*raj 9

您已将onAppear {..}和添加onDisappear {..}NavigationView 中,该NavigationView仍然可见/出现在DetailView 中。我想,你得到的是预期的行为。onDisappear {..}只有当视图从屏幕上消失时才会被调用。

onAppear {..}和添加onDisappear {..}到您的文本视图将给出您预期的结果。

更新的内容视图:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView()) {
                Text("Show detail view")
                .onAppear {
                    print("ContentView onAppear fired")
                }
                .onDisappear {
                    print("ContentView onDisappear fired")
                }
            }
            .navigationBarTitle("Master view")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新代码的输出:

ContentView onAppear fired
DetailView onAppear fired
ContentView onDisappear fired
ContentView onAppear fired
DetailView onDisappear fired
Run Code Online (Sandbox Code Playgroud)

谢谢!?