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

时间:2020-09-10 21:55:01

标签: swiftui

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

总结:

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

当我使用导航控制器导航到子视图(视图2 )时,没有为视图1 触发onDisappear,但是为触发了onAppear >查看2

当您导航回到 View 1 时,对于 View 1 您不会看到onAppear,对于(view 2)也不会看到onDisappear。

是否存在一种解决方法,可以可靠地在视图出现/消失时触发事件?还是应该尝试跳到Xcode Beta?

示例代码:

  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")
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您已将onAppear {..}onDisappear {..}添加到 NavigationView 中,该视图仍然可见/显示在 DetailView 中。我想,您得到的是预期的行为。 onDisappear {..}仅在视图离开屏幕时才会被调用。

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

更新的ContentView:

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

谢谢! ??