web-dev-qa-db-fra.com

Comment supprimer les séparateurs de "lignes" d'une liste dans SwiftUI?

J'essaie de supprimer les séparateurs de "lignes" d'un List dans SwiftUI.

J'ai parcouru la documentation List, mais je n'ai pas pu trouver de modificateur pour cela.

Toute aide serait appréciée.

24
Schiopu Evgheni

Vous pouvez utiliser ForEach dans un ScrollView au lieu de List pour des vues dynamiques sans aucun style

9
Rico Crescenzio

Il y a un UITableView derrière le List de SwiftUI pour iOS. Donc, pour supprimer

Séparateurs supplémentaires (sous la liste):

vous avez besoin d'un tableFooterView et pour supprimer

Tous les séparateurs (y compris les réels):

vous avez besoin de separatorStyle pour être .none

init() {
    // To remove only extra separators below the list:
    UITableView.appearance().tableFooterView = UIView()

    // To remove all separators including the actual ones:
    UITableView.appearance().separatorStyle = .none
}

var body: some View {
    List {
        Text("Item 1")
        Text("Item 2")
        Text("Item 3")
    }
}
7
Mojtaba Hosseini

alors que cette solution fonctionne correctement, nettoyons le travail en utilisant ViewModifier

public struct ListSeparatorStyleNoneModifier: ViewModifier {
    public func body(content: Content) -> some View {
        content.onAppear {
            UITableView.appearance().separatorStyle = .none
        }.onDisappear {
            UITableView.appearance().separatorStyle = .singleLine
        }
    }
}

faisons maintenant une petite extension qui aiderait à cacher les détails

extension View {
    public func listSeparatorStyleNone() -> some View {
        modifier(ListSeparatorStyleNoneModifier())
    }
}

Comme vous pouvez le voir, nous avons encapsulé notre code de configuration d'apparence dans un petit modificateur de vue soigné. vous pouvez le déclarer directement maintenant

List {
    Text("1")
    Text("2")
    Text("3")
}.listSeparatorStyleNone()
3
Moumen Osama

La solution de contournement actuelle consiste à les supprimer via UIAppearance:

UITableView.appearance(whenContainedInInstancesOf: 
    [UIHostingController<ContentView>.self]
).separatorStyle = .none
1
Matteo Pacini

Ajout de UITableView.appearance().separatorColor = .clear pour l'initialiseur

struct SomeView: View {
  init() {
        UITableView.appearance().separatorColor = .clear
    }
}

J'espère que vous résolvez ce problème.

1
Masanao Imai