在 SwiftUI 中有多个导航视图时隐藏导航栏
Hiding Navigation Bar in case of multiple Navigation Views in SwiftUI
我无法在有多个导航视图的情况下隐藏导航栏。我希望导航栏出现在第一个和第二个屏幕上,而不是第三个屏幕上。
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)
}
}
我试过用上面的代码隐藏第三屏的导航栏,但是不行:(
如果你想在第三视图完全隐藏导航栏,这里是可能的方法。 (注意:顺便说一句,在一个视图层次结构中必须只有一个 NavigationView,因此在 ThirdView 中不需要另一个)
测试 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
}
}
}
我无法在有多个导航视图的情况下隐藏导航栏。我希望导航栏出现在第一个和第二个屏幕上,而不是第三个屏幕上。
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)
}
}
我试过用上面的代码隐藏第三屏的导航栏,但是不行:(
如果你想在第三视图完全隐藏导航栏,这里是可能的方法。 (注意:顺便说一句,在一个视图层次结构中必须只有一个 NavigationView,因此在 ThirdView 中不需要另一个)
测试 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
}
}
}