Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI:允许导航栏仅显示在主页/首页上_Ios_Xcode_Uinavigationbar_Swiftui_Swift5 - Fatal编程技术网

Ios SwiftUI:允许导航栏仅显示在主页/首页上

Ios SwiftUI:允许导航栏仅显示在主页/首页上,ios,xcode,uinavigationbar,swiftui,swift5,Ios,Xcode,Uinavigationbar,Swiftui,Swift5,我已经编写了一个简单的格式化代码,显示了如果允许使用.navigationBarTitle(…)在第一个/主页上显示导航栏,则该页面的子视图将具有导航栏 主要观点: struct ContentView: View { var body: some View { NavigationView{ VStack{ NavigationLink(destination: View01()){

我已经编写了一个简单的格式化代码,显示了如果允许使用
.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)
,导航栏将保留在此处


我正在寻找任何一种解决方案,它允许我只在第一页/首页/主页上显示导航栏,而其他页/子页上没有导航栏。

如果要使用推送弹出, 请这样做:

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

如果要使用推送弹出, 请这样做:

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
和带有操作
self.navigationBarisheden=false
self.presentationMode.wrappedValue.disease()
的后退按钮,在到达主页面后,导航栏不会出现。知道为什么吗?@jpulikkottil谢谢。我更新了代码,请再次测试。当点击按钮弹出子视图(以编程方式)时,您是否找到了再次显示的方法?恐怕从长远来看,这不起作用。例如,如果我使用
@Environment(\.presentationMode)var presentationMode:Binding
和带有操作
self.navigationBarisheden=false
self.presentationMode.wrappedValue.disease()
的后退按钮,在到达主页面后,导航栏不会出现。知道为什么吗?@jpulikkottil谢谢。我更新了代码,请重新测试。