Je ne sais pas s'il s'agit d'un bug ou si je fais quelque chose de mal ici. J'ai ajouté un nouveau bouton sur la barre de navigation qui présenterait une nouvelle vue.
struct MyView: View { @ObservedObject var viewModel = MyViewModel() var body: some View { List(viewModel.data, id: \.name) { data in NavigationLink(destination: MyDetailView(data: data.name)) { Text(data.name) } } .listStyle(InsetGroupedListStyle()) .edgesIgnoringSafeArea(.all) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { NavigationLink(destination: MyDetailView()) { Text("New Element") } } } } }
Ceci est en cours de test sur les derniers iOS 14 beta (beta 6) et Xcode 12 (beta 6). Pour autant que je sache, un lien de navigation présente bien la nouvelle vue sur une liste, mais dans la barre d'outils comme indiqué, ce n'est pas le cas. Le bouton de la barre d'outils est visible et actif mais ne déclenche pas l'affichage de la nouvelle vue.
3 Réponses :
NavigationLink
doit être à l' intérieur de NavigationView
. La barre d'outils n'est pas dans NavigationView
, placez-y des boutons.
Donc en supposant que vous ayez quelque part en parent
struct MyView: View { @ObservedObject var viewModel = MyViewModel() @State private var showNew = false var body: some View { List(viewModel.data, id: \.name) { data in NavigationLink(destination: MyDetailView(data: data.name)) { Text(data.name) } } .listStyle(InsetGroupedListStyle()) .background( NavigationLink(destination: MyDetailView(), isActive: $showNew) { EmptyView() } ) .edgesIgnoringSafeArea(.all) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button("New Element") { self.showNew = true } } } } }
voici une solution:
NavigationView { MyView() }
Wow, je ne savais pas ça, c'était tellement utile et rapide. Merci @Asperi! :), fonctionne comme un charme!
J'ai trouvé que l'utilisation d'un HStack avec un texte vide car le premier élément fonctionne également, cela permet au navigationLink d'agir correctement.
.toolbar { ToolbarItem(placement: .navigationBarLeading) { HStack { Text("") NavigationLink(destination: SettingsView()) { Image(systemName: "gear") .font(.title) } } }
Eh bien, c'est bizarre.
L'utilisation de la solution Asperi peut ne pas fonctionner si votre lien de navigation dirige vers une vue avec saisie au clavier.
Après le lien de navigation, la barre d'outils dans la nouvelle vue s'est chargée correctement, mais lors de la saisie avec le clavier et de la suppression du clavier, tous les éléments de la barre d'outils disparaissent .
La solution consiste à placer NavigationLink non pas dans View mais dans navigationBarItems, exemple:
.navigationBarItems( leading: NavigationLink( destination: Creator(), isActive: $showCreator, label: { Text("") }))