Трудно сказать, основываясь на опубликованном вами коде, но похоже, что вы пытаетесь представить вид, который скользит снизу вверх, когда showSaveThePlanet
верно, а также отображать панель навигации только тогда, когдаэто представление появляется.
Это можно сделать, установив .navigationBarHidden(!showSaveThePlanet)
в любом месте вашего свойства body
. Обратите внимание, что ваш код нигде не использует NavigationLink
для перемещения нового представления в стек NavigationView
, поэтому вы не получите кнопку возврата. Вы можете добавить свою собственную кнопку, чтобы отклонить лист, используя .navigationBarItems(leading:)
Вот упрощенный пример, показывающий, что я имею в виду.
struct ContentView: View {
@State private var detailShowing = false
var body: some View {
NavigationView {
ZStack(alignment: Alignment(horizontal: .center, vertical: .top)) {
Color.gray.edgesIgnoringSafeArea(.all)
// A card-like view that is initially offscreen,
// and slides on when detailShowing == true
DetailView()
.offset(x: 0, y: detailShowing ? 120 : UIScreen.main.bounds.height)
.animation(.spring())
// Just here to change state
Button("Toggle") {
self.detailShowing.toggle()
}
.padding()
.offset(x: 0, y: detailShowing ? 0 : 44)
.animation(.none)
}
// This is the key modifier
.navigationBarHidden(!detailShowing)
.navigationBarTitle("Detail View", displayMode: .inline)
.navigationBarItems(leading: Button("Close") {
self.detailShowing = false
})
}
}
}
struct DetailView: View {
var body: some View {
ZStack(alignment: Alignment(horizontal: .center, vertical: .top)) {
RoundedRectangle(cornerRadius: 15).fill(Color.secondary).frame(width: 300, height: 500)
Text("Detail Content")
.padding()
}
}
}