SwiftUI 仅在查看 ContentView 时隐藏导航栏 [英] SwiftUI hiding a navigation bar only when looking at ContentView

查看:85
本文介绍了SwiftUI 仅在查看 ContentView 时隐藏导航栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个内容文件,正在隐藏导航栏,因为它占用空间并将元素向下推.ContentView 中的一个按钮重定向(使用导航链接)到另一个视图.在另一个视图中,navigationBar 仍然是隐藏的....为简单起见,我将从 ContentView 中删除一些代码:

I have a Content file and am hiding the navigation bar because it takes up space and pushes elements down. One of the buttons in the ContentView redirects (using a navigation link) to another view. In this other view, the navigationBar is still hidden....for simplicity sake, I'll cut out some of the code from ContentView:

//this is the view that looks "fine" (i.e. the navigation bar takes up no space)
struct ContentView: View {
    @State private var isPresentedSettings = false
    var body: some View {
        NavigationView {
            ZStack {
                VStack {
                    SettingsButton(isPresentedSettings: $isPresentedSettings)
                }
            }.navigationBarTitle("").navigationBarHidden(true)
        }
    }
}

//this is the button that pulls up the settings page view
struct SettingsButton: View {
    @Binding var isPresentedSettings: Bool
    var body: some View {
        NavigationLink (destination: SettingsPageView(isPresentedSettings: 
        self.$isPresentedSettings)) {
            Button(action: { self.isPresentedSettings.toggle() }, label: { Text("Button") })
        }
    }
}

//This is the view that should have a navigationbar but it doesn't
struct SettingsPageView: View {
    @Binding var isPresentedSettings: Bool
    var body: some View {
        NavigationView {
            VStack {
                Text("This is a view")
            }.navigationBarTitle("Settings", displayMode: .inline)
        }
    }
}

另外...可能有错别字,因为我只是从另一台计算机上复制了代码.抱歉,提前致谢!

Also...there may have been typos because I just copied the code over from another computer. Sorry and thank you in advance!

推荐答案

首先,您不需要使用这个 isPresentedSettings 变量来呈现 NavigationLink.

Firstly, you don't need to have this isPresentedSettings variable for presenting a NavigationLink.

NavigationLink(destination: SettingsPageView()) {
    Text("Button")
}

并且您的视图层次结构中应该只有一个 NavigationView.

And there should be only one NavigationView in your view hierarchy.

您的最终代码如下所示:

This is how your final code can look like:

struct ContentView: View {
    @State private var navBarHidden = true

    var body: some View {
        NavigationView {
            ZStack {
                VStack {
                    SettingsButton(navBarHidden: $navBarHidden)
                }
            }
            .navigationBarHidden(navBarHidden)
        }
    }
}

struct SettingsButton: View {
    @Binding var navBarHidden: Bool

    var body: some View {
        NavigationLink(destination: SettingsPageView(navBarHidden: $navBarHidden)) {
            Text("Show View")
        }
    }
}

struct SettingsPageView: View {
    @Binding var navBarHidden: Bool

    var body: some View {
        VStack {
            Text("This is a view")
        }
        .navigationBarTitle("Settings", displayMode: .inline)
        .onAppear {
            self.navBarHidden = false
        }
        .onDisappear {
            self.navBarHidden = true
        }
    }
}

这篇关于SwiftUI 仅在查看 ContentView 时隐藏导航栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆