Swiftui 在NavigationView内、TabView内、NavigationLink后显示NavigationBar。迅捷
我正在制作一个用户需要登录的应用程序,然后将我带到一个选项卡视图,其中我有3个不同的视图(导航视图) 问题是在我登录后,使用NavigationLink将我发送到选项卡视图,向我显示3个不同的视图,其中我有NavigationBarTitles;它还会在我的上方创建另一个(空)导航Bartitle 已经尝试使用通常的方法:在这个单独的视图中,消除NavigationView属性,因为它通常会起作用,但在本例中不起作用 登录视图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:
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]),显示:。内联)