SwiftUI:只允许导航栏出现在主页/首页
Posted
技术标签:
【中文标题】SwiftUI:只允许导航栏出现在主页/首页【英文标题】:SwiftUI: allow navigation bar to appear ONLY on the main/first page 【发布时间】:2020-01-15 13:11:32 【问题描述】:我写了一个简单格式化的代码,显示如果允许导航栏出现在首页/主页上,通过使用.navigationBarTitle(...)
,该页面的子视图将有导航栏。
主视图:
struct ContentView: View
var body: some View
NavigationView
VStack
NavigationLink(destination: View01())
Text("To view 1")
.navigationBarTitle("Front Page", displayMode: .inline) //removable, but needed for the first page's bar
主视图的子视图:
struct View01: View
var body: some View
VStack
EmptyView()
.navigationBarBackButtonHidden(true) //the back button is gone
.navigationBarHidden(true) //this has no effect here
当我从主代码中删除 .navigationBarTitle(...)
时,导航栏会从所有视图中消失。但是,如果我把它放回去并在子视图代码中使用.navigationBarHidden(true)
,导航栏仍然在这里。
我正在寻找任何解决方案,它允许我只在首页/首页/主页上显示导航栏,而其他页面/子页面没有导航栏。
【问题讨论】:
【参考方案1】:如果要使用push和pop, 请尝试这种方式:
struct ParentView: View
@State var navigationBarIsHidden: Bool = false
@State private var showDetail = false
var body: some View
NavigationView
ZStack
Color.red
NavigationLink("show child view", destination: ChildView(navigationBarIsHidden: $navigationBarIsHidden, showSelf: $showDetail), isActive: $showDetail)
.navigationBarTitle("title", displayMode: .inline)
.navigationBarHidden(navigationBarIsHidden)
.onAppear
self.navigationBarIsHidden = false
ChildView.swift
struct ChildView: View
@Binding var navigationBarIsHidden: Bool
@Binding var showSelf: Bool
var body: some View
ZStack
Color.green
Text("ChildView").onTapGesture
self.navigationBarIsHidden = false
self.showSelf = false
.onAppear
self.navigationBarIsHidden = true
【讨论】:
当按钮点击弹出子视图(以编程方式)时,您是否找到再次出现的方法 恐怕这从长远来看是行不通的。例如,如果我将@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
与带有动作self.navigationBarIsHidden = false
和self.presentationMode.wrappedValue.dismiss()
的后退按钮一起使用,则在到达主页后,导航栏没有出现回来。知道为什么吗?
@jpulikkottil 谢谢。我更新了代码,请重新测试。以上是关于SwiftUI:只允许导航栏出现在主页/首页的主要内容,如果未能解决你的问题,请参考以下文章
为啥导航栏中的 SwiftUI TextField 一次只接受输入一个字符