Lorsque vous créez une liste avec une ligne qui pousse vers une nouvelle vue, SwiftUI ajoute automatiquement un indicateur de divulgation ">"? Comment puis-je le supprimer si je ne le veux pas?
NavigationView {
List {
NavigationButton(destination: DetailView()) {
ListItem()
}
}
.navigationBarTitle(Text("Some title"))
}
Sur UITableViewCell, vous définissez Accessory sur None, mais comment dois-je procéder dans SwiftUI?
Le plus simple. Le contenu de chaque élément de la liste.
ZStack {
NavigationLink(destination: DetailView()) {
EmptyView()
}.hidden()
RowView()
}
Vous n'avez pas besoin d'utiliser NavigationLink
pour envelopper directement votre Label
. Cela fonctionnera tant que le lien se trouvera n'importe où dans votre hiérarchie de vues.
Ici, je l'ai enveloppé dans un bouton, ce qui vous permet de déclencher une action avant de pousser la vue. Étant donné que NavigationLink
a un EmptyView
pour l'étiquette, l'indicateur de divulgation n'est pas visible. Vous pouvez également le styliser avec ButtonStyle
.
struct NavigationButton<Destination: View, Label: View>: View {
var action: () -> Void = { }
var destination: () -> Destination
var label: () -> Label
@State private var isActive: Bool = false
var body: some View {
Button(action: {
self.action()
self.isActive.toggle()
}) {
self.label()
.background(NavigationLink(destination: self.destination(), isActive: self.$isActive) {
EmptyView()
})
}
}
}
Et pour l'utiliser:
NavigationButton(
action: { print("tapped!") },
destination: { Text("Pushed View") },
label: { Text("Tap me") }
)
Lorsque vous utilisez List (), il n'y a aucun moyen de supprimer l'indicateur de divulgation sans solution de contournement. Cependant, il existe un autre moyen simple de faire ce que vous voulez faire, sans List (). Au lieu d'un List (), vous pouvez utiliser un ScrollView () qui contient un ForEach ().
Ce n'est ni plus difficile ni plus long, mais cela fait disparaître les indicateurs de divulgation d'un NavigationLink sans astuce ni solution de contournement, sans frais supplémentaires! vous permettant de naviguer facilement vers une autre vue avec un joli bouton normal.
Fonctionne bien pour moi!
import SwiftUI
struct LandmarkList: View {
var body: some View {
NavigationView {
List(landmarkData) { landmark in
LandmarkRow(landmark: landmark)
NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
EmptyView()
}
}
.navigationBarTitle(Text("Landmarks"))
}
}
}
struct LandmarkList_Previews: PreviewProvider {
static var previews: some View {
ForEach(["iPhone SE", "iPhone 11 Pro Max"], id: \.self) { deviceName in
LandmarkList()
.previewDevice(PreviewDevice(rawValue: deviceName))
.previewDisplayName(deviceName)
}
}
}