Swiftui 在NavigationView内、TabView内、NavigationLink后显示NavigationBar。迅捷

Swiftui 在NavigationView内、TabView内、NavigationLink后显示NavigationBar。迅捷,swiftui,navigationbar,navigationview,tabview,navigationlink,Swiftui,Navigationbar,Navigationview,Tabview,Navigationlink,我正在制作一个用户需要登录的应用程序,然后将我带到一个选项卡视图,其中我有3个不同的视图(导航视图) 问题是在我登录后,使用NavigationLink将我发送到选项卡视图,向我显示3个不同的视图,其中我有NavigationBarTitles;它还会在我的上方创建另一个(空)导航Bartitle 已经尝试使用通常的方法:在这个单独的视图中,消除NavigationView属性,因为它通常会起作用,但在本例中不起作用 登录视图 import SwiftUI struct LogInView:

我正在制作一个用户需要登录的应用程序,然后将我带到一个选项卡视图,其中我有3个不同的视图(导航视图)

问题是在我登录后,使用NavigationLink将我发送到选项卡视图,向我显示3个不同的视图,其中我有NavigationBarTitles;它还会在我的上方创建另一个(空)导航Bartitle

已经尝试使用通常的方法:在这个单独的视图中,消除NavigationView属性,因为它通常会起作用,但在本例中不起作用

登录视图

import SwiftUI

struct LogInView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink (destination: ContentView()) {
                    Text("Log In")
                        .foregroundColor(.white)
                        .padding(15)
                        .background(Color.blue)
                        .cornerRadius(10)
                }
            }.navigationBarTitle("Log In View")
        }
    }
}

struct LogInView_Previews: PreviewProvider {
    static var previews: some View {
        LogInView()
    }
}
TABVIEW

import SwiftUI

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){

            DetailView()
                .font(.title)
                .tabItem {
                    VStack {
                        Image("first")
                        Text("First")
                    }
                }
                .tag(0)

        }.edgesIgnoringSafeArea(.top)
        .navigationBarBackButtonHidden(true)
        .navigationBarHidden(true)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
详细视图

import SwiftUI

struct DetailView: View {
    var body: some View {
        NavigationView {
            List {
                Text("Hi")
                Text("Hi")
                Text("Hi")
            }.navigationBarTitle("DetailView")
        }
    }
}

struct DetailView_Previews: PreviewProvider {
    static var previews: some View {
        DetailView()
    }
}

您可以优化ContentView中的所有内容,而不是detailView。虽然在您当前的工作中,推理是正确的,但演示背后的逻辑可能涉及一些调整

 struct ContentView: View {
@State private var selection = 0

var body: some View {
    TabView(selection: $selection){

        DetailView()
            .font(.title)
            .tabItem {
                VStack {
                    Image("first")
                    Text("First")
                }
            }
            .tag(0)

        }.edgesIgnoringSafeArea(.top)
        .navigationBarBackButtonHidden(true).navigationBarTitle("DetailView", displayMode: .inline).navigationBarHidden(true)

}
}


struct DetailView: View {
var body: some View {
        List {
            Text("Hi")
            Text("Hi")
            Text("Hi")
        }

}
}

如果子视图的父视图(或其父视图的父视图..)被包装在
导航视图中,则不应将其包装在
导航视图中。您只需在显示的照片上显示两个
NavigationView
s,因此删除DetailView中的一个,它仍然会从LogInView继承上:

struct DetailView: View {
    var body: some View {
        List {
            Text("Hi")
            Text("Hi")
            Text("Hi")
        }
        .navigationBarTitle("DetailView")
    }
}

我以前尝试过这个,但问题是我去掉了“空导航Bartitle”,但它也没有显示我的“DetailView NavigationBarTitle”。它再次变为空,但使用的是NavigationBarTitleSpace。这里的逻辑是正确的,但问题是,当我在“选项卡视图”中添加多个“详细视图”时,我无法为每个“详细视图”更改NavigationBarTitleText。您可以为标题名添加一个数组:
navigationBarTitle(DetailViewNames[selection]),显示:。内联)