89 votes

SwiftUI met à jour la couleur du titre de la barre de navigation

Comment changer la couleur du titre de la barre de navigation dans SwiftUI

NavigationView {
            List{
                ForEach(0..<15) { item in
                    HStack {
                        Text("Apple")
                            .font(.headline)
                            .fontWeight(.medium)
                            .color(.orange)
                            .lineLimit(1)
                            .multilineTextAlignment(.center)
                            .padding(.leading)
                            .frame(width: 125, height: nil)

                        Text("Apple Infinite Loop. Address: One Infinite Loop Cupertino, CA 95014 (408) 606-5775 ")
                            .font(.subheadline)
                            .fontWeight(.regular)
                            .multilineTextAlignment(.leading)
                            .lineLimit(nil)

                    }
                }
            }
            .navigationBarTitle(Text("TEST")).navigationBarHidden(false).foregroundColor(.orange)
            }

J'ai essayé avec .foregroundColor(.orange) mais cela ne fonctionne pas

a également essayé .navigationBarTitle(Text("TEST").color(.orange))

Comment faire ?

3 votes

Hm... il semble que swiftUI ignore tout modificateur défini pour le titre de la barre de navigation... Et il est également étrange que nous ne pouvons pas mettre n'importe quelle vue dans la barre de navigation :-(

1voto

MAGiGO Points 368

https://stackoverflow.com/a/58427754/4709057 Cette réponse fonctionne, mais si vous rencontrez des problèmes avec le contrôleur de navigation qui est nul en mode clair ou foncé. Ajoutez simplement ceci, sans savoir pourquoi cela fonctionne.

struct ContentView: View {
   var body: some View {
      NavigationView {
        ScrollView {
            Text("Don't use .appearance()!")
        }
        .navigationBarTitle("Try it!", displayMode: .inline)
        .background(NavigationConfigurator { nc in
            nc.navigationBar.barTintColor = .blue
            nc.navigationBar.background = .blue
            nc.navigationBar.titleTextAttributes = [.foregroundColor : UIColor.white]
        })
    }
   .navigationViewStyle(StackNavigationViewStyle())
   .accentColor(.red)   <------- DOES THE JOB
  }
}

1voto

Eldar Points 124

.foregroundColor(.orange) - NavigationView.

Mais pour changer la vue de navigation elle-même, vous devez utiliser UINavigationBar Appearance() en init()

Je cherchais ce problème et j'ai trouvé un excellent article à ce sujet. il . J'ai modifié votre code par cet article et j'ai réussi. Ici, comment j'ai résolu ce problème :

struct ContentView: View {

    init() {
        let coloredAppearance = UINavigationBarAppearance()

        // this overrides everything you have set up earlier.
        coloredAppearance.configureWithTransparentBackground()
        coloredAppearance.backgroundColor = .green
        coloredAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black]

        // to make everything work normally
        UINavigationBar.appearance().standardAppearance = coloredAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
    }

    var body: some View {
        NavigationView {
            List{
                ForEach(0..<15) { item in
                    HStack {
                        Text("Apple")
                            .font(.headline)
                            .fontWeight(.medium)
                            .lineLimit(1)
                            .multilineTextAlignment(.center)
                            .padding(.leading)
                            .frame(width: 125, height: nil)
                            .foregroundColor(.orange)

                        Text("Apple Infinite Loop. Address: One Infinite Loop Cupertino, CA 95014 (408) 606-5775 ")
                            .font(.subheadline)
                            .fontWeight(.regular)
                            .multilineTextAlignment(.leading)
                            .lineLimit(nil)
                            .foregroundColor(.orange)
                    }
                }
            }
            .navigationBarTitle(Text("TEST"))
        }
// do not forget to add this
        .navigationViewStyle(StackNavigationViewStyle())
    }
}

Vous pouvez également prendre quelques exemples aquí

0voto

George_E_2 Points 622

Au lieu de définir appearance() qui affecte todo vous pouvez les définir individuellement en utilisant SwiftUI-Introspect .

Ejemplo:

struct ContentView: View {
    var body: some View {
        NavigationView {
            ScrollView {
                Text("Hello world!")
            }
            .navigationTitle("Title")
        }
        .introspectNavigationController { nav in
            nav.navigationBar.barTintColor = .systemBlue
        }
    }
}

Résultat :

Result

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X