SwiftUI onAppear вызывается дважды, когда NavigationView внутри TabView

Итак, у меня есть TabView, где каждая вкладка встроена в NavigationView. При первом появлении каждой вкладки я получаю следующие вызовы жизненного цикла onAppear(), onDisappear(), onAppear(). Похоже, что onAppear вызывается дважды. Это происходит только в первый раз. Если я вернусь к той же вкладке, вызывается только onAppear() и только один раз.

Вот минимальный пример:

      struct Page1: View {
    init() { print("Page 1 init") }
    
    var body: some View {
        NavigationView {
            Text("Page 1")
                .onAppear(perform: { print("Page 1 appearing") })
                .onDisappear(perform: { print("Page 1 disappearing") })
        }
    }
}

struct Page2: View {
    init() { print("Page 2 init") }
    
    var body: some View {
        NavigationView {
            Text("Page 2")
                .onAppear(perform: { print("Page 2 appearing") })
                .onDisappear(perform: { print("Page 2 disappearing") })
        }
    }
}

struct ContentView: View {
    var body: some View {
        TabView {
            Page1().tabItem { Text("Page 1") }
            Page2().tabItem { Text("Page 2") }
        }
    }
}

И вот распечатанный результат:

      Page 1 init
Page 2 init
Page 1 appearing
Page 1 disappearing
Page 1 appearing

Вот что произойдет, если я нажму на вторую вкладку

      Page 1 init
Page 2 init
Page 1 appearing
Page 1 disappearing
Page 1 appearing
// here I clicked on second tab
Page 2 appearing
Page 2 disappearing
Page 2 appearing
Page 1 disappearing

1 ответ

          TabView {
        NavigationView {
            VStack {
                Color.red
                    .onAppear {
                        print("appear : red")
                    }
                    .onDisappear {
                        print("disappear : red")
                    }
            }.onAppear {
                print("appear")
            }
        }
    }

Тестирование на iOS 15 beta Simulator

Выход:

      appear : red
appear
disappear : red
appear : red
Другие вопросы по тегам