Редактирование NavigationBarItems и NavigationBarTitle в SwiftUI внутри TabView - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь изменить заголовок панели навигации, а также ведущие и конечные элементы в приложении SwiftUI. Вот ситуация: пользователь входит в систему, затем его переводят в представление внутри TabView. Перед входом в систему, на экране приветствия и экранах входа и регистрации у меня нет заголовка панели навигации, но после входа в систему я хочу добавить элементы и заголовок панели навигации. Что важно знать, так это то, что мое представление после входа в систему находится внутри TabView. Если я оберну свое представление после входа в новый NavigationView, а затем изменю элементы панели навигации и заголовок, он будет работать! но он показывает мне 2 панели навигации: the top is the first navigation bar and the bottom is the new navigation bar

, что не то, что я хочу.

вот код, который я использую: Это после входа в систему- Просмотр

       import SwiftUI

       struct DiscoveryView: View {
             var body: some View {
                  List{
                       Text("List Items")
                  }.offset(y: 10)
                   .navigationBarTitle("", displayMode: .inline)
                   .navigationBarItems(leading:
                     Text("Discovery").font(Font.custom("Quicksand-             Bold", size: 24))
                   , trailing:
                       Button(action: {

                       }) {
                          HStack{
                             Text("120").font(Font.custom("Quicksand-Bold", size: 15)).foregroundColor(Color("BlueColor"))
                          Text("following").font(Font.custom("Quicksand-Bold", size: 15)).foregroundColor(Color.black)
                         }
                    }
                  ).navigationBarBackButtonHidden(true)
                }
              }

Это TabView:

struct TabController : View {

@State private var selection = 0
var body: some View {
    TabView(selection: $selection){

        DiscoveryView()
            .tabItem {
                VStack {
                    Image(systemName: "list.dash")
                    Text("Discover")
                }
        }.tag(1)

        ExploreView()
            .tabItem {
                VStack {
                    Image(systemName: "square.and.pencil")
                    Text("Explore")
                }
        }.tag(2)
        SelfProfileView()
            .tabItem{
                VStack {
                    Image(systemName: "person.circle")
                    Text("Profile")

                }
        }.tag(3)

    }.accentColor(Color("BlueColor"))
}

}

Это код страницы входа:

import SwiftUI

struct LoginView: View {

var body: some View {
    ZStack{
        VStack{
            Image("mainLogo").resizable().frame(width: 250, height: 125)
            Text("").frame(width: UIScreen.main.bounds.width, height: 100)
            HStack{
                TextField("Username / Email", text: $email)
                    .padding(.leading, 10)
                    .frame(width: 313, height: 49)
                    .background(RoundedRectangle(cornerRadius: 4).stroke( Color.black.opacity(0.3)).frame(width: 313, height: 39).background(Color("GrayColor")))
            }
            Text("").frame(width: UIScreen.main.bounds.width, height: 40)
            HStack {
                HStack{
                        if self.visable{
                            TextField("Password", text: $password)
                                .padding(.horizontal)

                        } else {
                            SecureField("Password", text: $password)
                                .padding(.horizontal)

                        }
                        Button(action: {
                            self.visable.toggle()
                        }){
                            Image(systemName: self.visable ? "eye.slash" : "eye")
                                .padding(.trailing, 20)
                                .foregroundColor(Color.black)
                        }
                }.background(RoundedRectangle(cornerRadius: 4).stroke( Color.black.opacity(0.3)).frame(width: 313, height: 39).background(Color("GrayColor")) )
            }.padding(.horizontal, 40).padding(.vertical)
            Text("").frame(width: UIScreen.main.bounds.width, height: 100)
            Button(action: {
                //pass email password and conpassword to cognito
                DSManager().signIn(username: self.email, password: self.password, error: {
                    error in
                    if let error = error{
                        self.error = error.errorString
                        self.alert.toggle()
                        print(error.errorString)
                    }
                    else{
                        DSManager().getSelfUserInformation(response: {
                            userInfo, userCollections,dsError in
                            if let dsError = dsError{
                                self.error = dsError.errorString
                                self.alert.toggle()
                                print(dsError.errorString)
                            }
                            if let userInfo = userInfo{
                                print("success")
                                //use userInfo to load stuff for profile page
                                if let userCollections = userCollections{
                                    self.profileInfo.setProperties(userInfo: userInfo, collections: userCollections)
                                }
                                else{
                                    self.profileInfo.setProperties(userInfo: userInfo, collections: [:])
                                }
                                self.isComplete.toggle()

                            }
                        })
                    }
                })
            }) {
                Text("Login")
                    .fontWeight(.semibold)
                    .frame(width: 313, height: 48)
                    .background(fillAllFields() ? Color("YellowColor") : Color.gray)
                    .foregroundColor(Color.white)
                    .font(.system(size: 17))
                    .cornerRadius(15)
                    .shadow(color: Color("GrayColor"), radius: 0, x: 3, y: 3)
            }.disabled(!fillAllFields())
            NavigationLink(destination: ProfileView(), isActive: $isComplete) {
                EmptyView()
            }
            Spacer()
        }
        .padding()
        .navigationBarTitle("", displayMode: .inline)
        if self.alert {
            ErrorView(err: $error, alert: $alert)
        }
    }
}

func fillAllFields() -> Bool {
    if self.email == "" || self.password == "" {
        return false
    }
    return true
}

}

Как уже упоминалось, я пытаюсь редактировать элементы панели и заголовок представления внутри и представление вкладки.

Спасибо!

1 Ответ

0 голосов
/ 28 мая 2020

Итак, согласно вашему обновленному вопросу, я добавил DiscoveryView Inside NavigationView, и он работал, как ожидалось. Я также добавил код и снимок экрана.

struct TabController : View {

@State private var selection = 0

var body: some View {
    TabView(selection: $selection) {
        NavigationView {
        DiscoveryView()
        }
            .tabItem {
                VStack {
                    Image(systemName: "list.dash")
                    Text("Discover")
                }
        }.tag(1)

        Text("Explore View")
            .tabItem {
                VStack {
                    Image(systemName: "square.and.pencil")
                    Text("Explore")
                }
        }.tag(2)
        Text("SelfProfileView")
            .tabItem{
                VStack {
                    Image(systemName: "person.circle")
                    Text("Profile")

                }
        }.tag(3)

    }.accentColor(Color("BlueColor"))
}} 

DiscoveryView with navigation leading and trailing view

...