SwiftUI:只允许导航栏出现在主页/首页上

时间:2020-01-15 13:11:32

标签: ios xcode uinavigationbar swiftui swift5

我编写了一个简单的格式代码,显示如果允许导航栏出现在第一页/主页上,则使用.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 个答案:

答案 0 :(得分:1)

如果您要使用弹出, 请尝试这种方式:

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
        }
    }
}