在根视图中放置导航栏时不显示

时间:2019-12-17 15:28:14

标签: swiftui

不确定这是否是实现在整个应用程序中访问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中,导航栏没有出现,并且内容浮在状态栏中,如下图所示。

enter image description here

这是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"))  
    }
}

1 个答案:

答案 0 :(得分:0)

这实际上并不起作用(正如您已经发现的那样。)类似地,在UIKit中,这也不起作用。您需要为每个标签创建NavigationView。通常,您的TabView是您的顶级视图,每个选项卡都可以包装在NavigationView中。完成此操作后,您也可能无需忽略顶部边缘安全区域,因为NavigationView将位于正确的位置,并正确地传达了条形图终止于其子视图的位置。