不确定这是否是实现在整个应用程序中访问NavigationLink的正确方法,但是我将NavigationBar放在了根视图中,该视图恰好是选项卡控制器。参见下面的代码。
import SwiftUI
import Firebase
import Combine
struct ContentView: View {
@EnvironmentObject var session: SessionStore
func getUser() {
session.listen()
}
var body: some View {
NavigationView {
Group {
TabView {
ExploreView().tabItem {
Image(systemName: "house.fill")
Text("Explore")
}.tag(1)
FestivalsView().tabItem {
Image(systemName: "globe")
Text("Festivals")
}.tag(2)
MapView().tabItem {
Image(systemName: "map")
Text("Map")
}.tag(3)
ProfileView().tabItem {
Image(systemName: "person.crop.circle.fill")
Text("Profile")
}.tag(4)
}
.accentColor(Color("wdwPurple"))
.edgesIgnoringSafeArea(.top)
}.onAppear(perform: getUser)
}
}
}
但是,在我的ExploreView中,导航栏没有出现,并且内容浮在状态栏中,如下图所示。
这是ExploreView的代码
import SwiftUI
import Firebase
import Combine
import FirebaseFirestore
import UIKit
struct ExploreView: View {
let db = Firestore.firestore()
var model = Passport.all()
var body: some View {
VStack {
ScrollView (.vertical, showsIndicators: false) {
Header()
.padding(.horizontal, 24)
HStack {
Image("Ad_Banner")
.resizable()
.scaledToFill()
.frame(minWidth: 0, maxWidth: 366)
.padding(.bottom, 5)
}.padding(.horizontal, 24)
HStack {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
NavigationLink (destination: EventsView()) {
ExploreBoxes(tileLabel: "Events", tileIcon: "calendar")
.padding(.leading, 24)
.padding(.trailing, 10)
}
NavigationLink (destination: FavoritesView()) {
ExploreBoxes(tileLabel: "Favorites", tileIcon: "heart.fill")
.padding(.trailing, 10)
}
NavigationLink (destination: ParkMapsView()) {
ExploreBoxes(tileLabel: "Park Maps", tileIcon: "mappin.and.ellipse")
.padding(.trailing, 10)
}
}.frame(height: 180)
}
}
NavigationLink (destination: AboutView()) {
HStack {
Image("Image_Passports_Learn")
.renderingMode(.original)
.resizable()
.scaledToFill()
.frame(minWidth: 0, maxWidth: 366)
.cornerRadius(4)
}.padding(.horizontal, 24)
.padding(.bottom, 90)
}
}.navigationBarTitle(Text(""))
Spacer()
}.edgesIgnoringSafeArea(.bottom)
.background(Color("bodyBackground"))
}
}
答案 0 :(得分:0)
这实际上并不起作用(正如您已经发现的那样。)类似地,在UIKit中,这也不起作用。您需要为每个标签创建NavigationView
。通常,您的TabView
是您的顶级视图,每个选项卡都可以包装在NavigationView
中。完成此操作后,您也可能无需忽略顶部边缘安全区域,因为NavigationView
将位于正确的位置,并正确地传达了条形图终止于其子视图的位置。