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】:

如果要使用pushpop, 请尝试这种方式:

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 = falseself.presentationMode.wrappedValue.dismiss() 的后退按钮一起使用,则在到达主页后,导航栏没有出现回来。知道为什么吗? @jpulikkottil 谢谢。我更新了代码,请重新测试。

以上是关于SwiftUI:只允许导航栏出现在主页/首页的主要内容,如果未能解决你的问题,请参考以下文章

为啥导航栏中的 SwiftUI TextField 一次只接受输入一个字符

在 SwiftUI 中的多个导航视图的情况下隐藏导航栏

SwiftUI – 导航栏“isTranscluent”属性在 iPad 上崩溃

无法使我的状态栏颜色与 SwiftUI 中的导航栏颜色匹配

更新 SwiftUI 导航栏标题

怎样删除淘宝导航栏?