У меня есть следующий код:
struct ContentView: View {
@State public var navBarHidden = true
var body: some View {
NavigationView{
VStack{
ZStack(alignment: .center){
View1().onAppear{self.navBarHidden = true}
View2()
View3(navBarHidden: $navBarHidden)
}.navigationBarTitle("").navigationBarHidden(self.navBarHidden)
}
}
}
}
//View3
struct View3: View {
@Binding public var navBarHidden: Bool
var body: some View {
NavigationView{
VStack{
MenuButton(buttonText: "Settings", buttonCallView: AnyView(SettingsView() .navigationBarTitle(Text("Settings"), displayMode: .inline)))
.simultaneousGesture(TapGesture().onEnded {
self.navBarHidden = false
})
}
}
}
}
//Menu Button
struct MenuButton: View {
var buttonText: String
var buttonCallView: AnyView
var body: some View {
NavigationLink(destination: self.buttonCallView) {
Text(self.buttonText)
}.padding()
}
}
Это нормально работает для панели навигации, которая появляется после того, как я нажимаю эту кнопку MenuButton, но когда возвращаюсь, и .onAppear
из View1
должен Срабатывает, он только меняет @State каждый раз, когда я возвращаюсь из Подменю, которое вызывает Кнопка Меню. Я пробовал print("one")
в .onAppear
, и это печатается каждый раз. Я ожидаю, что это будет некоторый «поздний» ответ: .onAppear
.
У меня есть обходной путь. Добавляя .onDisappear
к представлению, кнопка вызывает ее работу. Но это не идеально.
MenuButton(buttonText: "Settings", buttonCallView: AnyView(Settings().onDisappear{self.navBarHidden = true}.navigationBarTitle(Text("Settings"), displayMode: .inline)))
.simultaneousGesture(TapGesture().onEnded {
self.navBarHidden = false
})