在SwiftUI中有多个导航视图时隐藏导航栏
如果有多个导航视图,我很难隐藏导航栏。我希望导航栏出现在第一个和第二个屏幕上,而不是第三个屏幕上在SwiftUI中有多个导航视图时隐藏导航栏,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,如果有多个导航视图,我很难隐藏导航栏。我希望导航栏出现在第一个和第二个屏幕上,而不是第三个屏幕上 struct FirstView: View { init() { UINavigationBar.appearance().backgroundColor = UIColor.green } var body: some View { NavigationView { NavigationLink(dest
struct FirstView: View {
init() {
UINavigationBar.appearance().backgroundColor = UIColor.green
}
var body: some View {
NavigationView {
NavigationLink(destination: SecondView()) {
Text("Second View")
}.navigationBarTitle("First View")
}
}
}
// Second View
struct SecondView: View {
var body: some View {
NavigationLink(destination: ThirdView()) {
Text("Third View")
}
}
}
// Third View
struct ThirdView: View {
var body: some View {
Text("Welcome")
.navigationBarTitle("")
.navigationBarHidden(true)
}
}
我尝试用上面的代码在第三个屏幕上隐藏导航栏,但它不起作用:(
如果您想在第三视图中完全隐藏导航栏,这里是一种可能的方法。(注意:在一个视图层次结构中,必须只有一个导航视图,因此第三视图中不需要另一个导航视图) 使用Xcode 11.4/iOS 13.4进行测试
class HideBarViewModel: ObservableObject {
@Published var isHidden = false
}
struct FirstView: View {
@ObservedObject var vm = HideBarViewModel()
init() {
UINavigationBar.appearance().backgroundColor = UIColor.green
}
var body: some View {
NavigationView {
NavigationLink(destination: SecondView()) {
Text("Second View")
}.navigationBarTitle("First View")
.navigationBarHidden(vm.isHidden)
}.environmentObject(vm)
}
}
// Second View
struct SecondView: View {
var body: some View {
NavigationLink(destination: ThirdView()) {
Text("Third View")
}
}
}
// Third View
struct ThirdView: View {
@EnvironmentObject var vm: HideBarViewModel
var body: some View {
Text("Welcome")
.onAppear {
self.vm.isHidden = true
}
}
}
每个导航堆栈应该只有一个NavigationView。它将如何帮助我隐藏第三个屏幕的导航栏?您建议的解决方案也只是在第二个屏幕上添加一个标题。尝试了您的解决方案,但无法解决我试图实现的问题:(