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