swiftui - 在 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
}
}
}
推荐阅读
- r - 运行嵌套小标题的回归
- python - ValueError:无法序列化:django 中的 jdatetime.datetime()
- perl - 在 perl 脚本 (cgi-bin) 中使用 `sudo grep syslog` 时权限被拒绝
- python - 如何验证模态对话框的存在
- vb.net - 如何在 vb.net 中实现 OpenXml GradientFill
- javascript - Echarts如何在条形图的特定条之间添加垂直虚线?
- jupyter-notebook - 未捕获的 ReferenceError:未定义 Plotly
- jpa - 从继承的对象获取视图中的属性
- python - 使用 Pandas DataFrames 的分箱数据散点图
- visual-studio - 带有 GLAD 的 VS 2017 社区中的链接器错误