web-dev-qa-db-fra.com

Comment changer la couleur d'arrière-plan d'un formulaire dans SwiftUI?

Je veux changer cette couleur d'arrière-plan "gris clair" pour un formulaire, mais .foregroundColor(Color.blue) et .background(Color.blue) ne semble pas fonctionner

struct ContentView : View {

 @State var value = ""

    var body: some View {
        Form {
            Section(header: Text("First Name")) {
                TextField($value)
            }
            Section(header: Text("Last Name")) {
                TextField($value)
            }
        }.foregroundColor(Color.blue)

    }
}

enter image description here

9
Sorin Lica

Une solution de travail:

Tous les List de SwiftUI sont soutenus par un UITableView dans iOS. vous devez donc changer la couleur d'arrière-plan de the tableView. Mais puisque les valeurs Color et UIColor sont légèrement différentes, vous pouvez vous débarrasser des UIColor.

struct ContentView: View {

    init(){
        UITableView.appearance().backgroundColor = .clear
    }

    @State var value = ""

    var body: some View {
        Form {
            Section(header: Text("First Name")) {
                TextField("First Name", text: $value)
            }
            Section(header: Text("Last Name")) {
                TextField("Last Name", text: $value)
            }
        }
        .foregroundColor(Color.blue)
        .background(Color.yellow)
    }
}

Vous pouvez maintenant utiliser Tout arrière-plan (y compris tous les Colors) que vous souhaitez

Preview

Notez que ces zones blanches en haut et en bas sont en toute sécurité et vous pouvez utiliser le modificateur .edgesIgnoringSafeArea() pour se débarrasser d'eux.

11
Mojtaba Hosseini

La réponse acceptée par Mojtaba Hosseini, ci-dessus, fonctionne mais l'instruction init () n'est pas un bon endroit pour l'instruction UITableView. En effet, il "code en dur" les paramètres d'initialisation de ContentView. Dans ce cas, il n'en a aucun, donc tout fonctionne mais si un @ObservedObject A été ajouté à la vue, cela interromprait la fonction init.

Beaucoup plus simple, juste pour ajouter l'instruction UITable au body, renvoyer explicitement le Form et supprimer le init().

var body: some View {
    UITableView.appearance().backgroundColor = .clear
    return Form {...}
 }

Cependant, la définition de la couleur d'arrière-plan sur Form fonctionne généralement comme prévu. Le fait qu'il ne fonctionne pas sur l'écran ContentView peut être un bug.

4
Vince O'Sullivan

essaye ça

.onAppear {
   UITableView.appearance().backgroundColor = .blue
}
1
Paloma Bispo