web-dev-qa-db-fra.com

Couleur d'arrière-plan SwiftUI de List Mac OS

J'utilise un ListView sous Mac OS. J'essaye de changer cette couleur d'arrière-plan de ce ListView. Cependant, ce n'est pas aussi simple que prévu.

J'ai essayé d'utiliser l'attribut .background(Color(.red)) sur le ListView. Cela n'a rien changé.

Je n'ai pu trouver que .listRowBackground(Color(.red)) qui avait une influence sur les lignes du tableau. Cependant, l'autre arrière-plan n'a pas été affecté.

J'ai préparé une petite démo pour démontrer:

Dans mon corps de vue:

  VStack
    {
        List()
        {
            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

            Text("Test")
                .listRowBackground(Color.green)

        }.background(Color(.red))

    }.background(Color(.red))

C'est le résultat que j'obtiens:

enter image description here

Le contexte principal ne change pas. J'ai lu une solution modifiant le UITableView.appearance mais ce n'est pas possible pour moi dans SwiftUI pour Mac OS.

Merci d'avance

5
davidev

Malheureusement, le protocole ListStyle n'est pas documenté et .listStyle le modificateur a une utilisation très limitée, vous pouvez choisir parmi CarouselListStyle, DefaultListStyle, GroupedListStyle ,PlainListStyle, SidebarListStyle

Essayez d'imiter List avec ScrollView combiné avec ForEach, ce qui vous donne beaucoup de flexibilité, les parties manquantes sont faciles à écrire. Une fois que le ListStyle sera disponible pour les développeurs, il sera facile de changer le code ...

Exemple enter image description here avec le code source

struct ContentView: View {
    var body: some View {
        HStack(spacing: 0) {
            ScrollView {
                ForEach(0 ..< 4) { idx in
                    VStack(alignment: .leading) {
                        Divider().background(Color.blue)
                        Text("Test \(idx)")
                            .padding(.horizontal, 10)
                            .background(Color.pink)
                        //Divider()
                    }.padding(.bottom, -6)
                }
            }
                .frame(maxWidth: 100)
            .background(Color.gray)

            Color.green
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
    }
}
1
user3441734