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

SwiftUI onAppear/onDisappear在Xcode 11.7(11E801a)iOS 13.7中不工作,swiftui,Swiftui,我已经读过关于这个问题的文章,评论指出这是一个bug,已经在11.7上修复了,但是我仍然在那个版本上遇到它 总之: 当应用程序启动时,您的视图视图1会触发onAppear 当我使用导航控制器导航到子视图(视图2)时,不会为视图1触发onDisappear,但会为视图2触发onAppear 当您导航回视图1时,您不会看到视图1的onAppear或(视图2)的onDisappear 当视图出现/消失时,是否有可靠的方法来触发事件?或者我应该尝试跳到Xcode测试版吗 示例代码: import S

我已经读过关于这个问题的文章,评论指出这是一个bug,已经在11.7上修复了,但是我仍然在那个版本上遇到它

总之:

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

当我使用导航控制器导航到子视图(视图2)时,不会为视图1触发onDisappear,但会为视图2触发onAppear

当您导航回视图1时,您不会看到视图1的onAppear或(视图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")
            }
        }
    }

您已将
onAppear{..}
onDisappear{..}
添加到导航视图中,该视图仍然可见/显示在详细视图中。我想,你得到的是预期的行为
onDisappear{..}
仅在视图从屏幕关闭时调用

onAppear{..}
onDisappear{..}
添加到文本视图将得到预期的结果

更新内容视图: 更新代码的输出:
谢谢!你能提供一个吗?补充!fwiw detailView的onDisappear启动了,所以我想问题是contentView的onAppear只在初始加载时启动。这就是SwiftUI的工作方式。您可以在DetailView中使用
onDisappear
,而不是ContentView中的
onAppear
。但是如果你解释一下你为什么需要它,你可能会得到一个更好的答案。我以为每次我回到风景区,一个幻影就会开火。我正在使用它们来管理Firebase快照侦听器。我想知道onDisappear至少起作用,我就能解决我的问题。非常感谢!这是非常有用的,也是我需要的。现在一切正常@Helvetica很高兴它帮助了你。请检查一下这个,
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")
        }
    }
}
ContentView onAppear fired
DetailView onAppear fired
ContentView onDisappear fired
ContentView onAppear fired
DetailView onDisappear fired