У меня есть RootView
с .navigationBarHidden(hideBar)
(@State var hideBar = true) и ChildView
с .simultaneousGesture(TapGesture().onEnded { self.hideBar = false })
, что заставляет RootView
автоматически устанавливать hideBar
на false
после перехода. Поскольку я не хочу, чтобы на моем RootView
была панель навигации, я установил .onAppear {self.hideBar = true}.
Проблема в том, что когда я делаю жест смахивания вправо (from ChildView back to RootView
), даже хотя я не полностью смахиваю (<половина) до <code>RootView, он все равно автоматически устанавливает hideBar back to true
, скрывая backbutton
и navbar
на ChildView
.
Есть какие-то идеи как справиться с этой проблемой? Был бы признателен за любую помощь!
Вот мой код:
struct ExploreView: View {
@State private var hideBar = true
var body: some View {
VStack{
HStack{
NavigationLink(destination:MessagesView()){
Image("messages")
}.simultaneousGesture(TapGesture().onEnded {
self.hideBar = false
})
.foregroundColor(Color("blackAndWhite"))
}.padding(EdgeInsets(top: 5, leading: 20, bottom: 0, trailing: 20))
}
.navigationBarTitle(Text(""), displayMode: .inline)
.navigationBarHidden(hideBar)
.onAppear {
self.hideBar = true // hides on back
}
}
}
Вот TabBarView:
struct TabBarView: View {
@State var selection: Int = 0
@State var index: Int = 0
var body: some View {
ZStack{
GeometryReader { geometry in
NavigationView{
TabView(selection: self.$selection){
ExploreView()
// .navigationBarHidden(true)
.tabItem{
VStack{
Image("clostNav").renderingMode(.template)
Text("Explore")
}.foregroundColor(Color("blackAndWhite"))
}.tag(0)
SearchView()
.navigationBarTitle(Text(""), displayMode: .inline)
.navigationBarHidden(true)
.tabItem{
Image("search").renderingMode(.template)
Text("Search")
}.tag(1)
PostView()
.navigationBarTitle(Text(""), displayMode: .inline)
.navigationBarHidden(true)
.tabItem{
HStack{
Image("post").renderingMode(.template)
.resizable().frame(width: 35, height: 35)
}
}.tag(2)
OrdersView()
.navigationBarTitle(Text(""), displayMode: .inline)
.navigationBarHidden(true)
.tabItem{
Image("orders").renderingMode(.template)
Text("Orders")
}.tag(3)
ProfileView()
// .navigationBarTitle(Text(""), displayMode: .inline)
// .navigationBarHidden(true)
.tabItem{
Image("profile").renderingMode(.template)
Text("Profile")
}.tag(4)
}
}.accentColor(Color("redMain"))
.opacity(self.selection == 2 ? 0.001 : 1)
PostView()
.offset(x: geometry.size.width / 2 - 30, y: geometry.size.height - 80)
.onTapGesture {
self.selection = 0
}
.opacity(self.selection == 2 ? 1 : 0)
}
}
}
}
Пояснение:
Я поставил Tabbar{}
внутри NavigationView
, чтобы bottomTabbar
скрывался после NavigationLink от ExploreView
до MessagesView
.
Повторяю мою проблему:
Когда вы нажимаете NavLink на MessagesView
, все работает отлично, но при смахивании вправо немного закрыть MessagesView
(.onAppear {self.hideBar = true} запускает и скрывает NavBar в MessagesView
даже я еще не закрыл).