web-dev-qa-db-fra.com

SwiftUI: comment utiliser NavigationView sous macOS?

J'ai deux projets Xcode distincts que j'utilise pour apprendre SwiftUI:

  1. Un vrai projet macOS (pas Catalyst) sur Mac.
  2. Un projet iOS (iPhone).

Le code suivant crée un NavigationView simple avec des vues maître-détail:

import SwiftUI

struct ListView : View {
    var body: some View {
        NavigationView {
            List() {
                NavigationButton(destination: Text("detail 1")) {
                    Text("row 1")
                }
                NavigationButton(destination: Text("detail 2")) {
                    Text("row 2")
                }
            }
        }
    }
}

#if DEBUG
struct ListView_Previews : PreviewProvider {
    static var previews: some View {
        ListView()
    }
}
#endif

Cela fonctionne comme prévu sur iOS ????

Mais sur le projet macOS, le même code que ci-dessus ne fonctionne pas de la même manière ????

Lorsque je lance l'application sur Mac, j'obtiens cette fenêtre

enter image description here

Et lorsque je clique sur une ligne, la vue détaillée se réduit/disparaît, ne me montrant jamais la vue détaillée.

enter image description here

Une idée de comment réparer ça? Peut-être que je manque quelque chose? Ou peut-être que c'est juste un bug?

8
Salavat Khanov

Je n'ai pas la réponse, mais j'essaie de faire la même chose et j'ai quelques observations à ajouter, peut-être qu'ils aideront:

Ajouter une vue de destination:

NavigationButton(destination: DetailView()) {
            Text("Show Detail")
        }

La définition d'une largeur sur la NavigationView empêche la vue de droite de disparaître.

De plus, l'ajout

 .onAppear { print("DetailView called") } 

à la vue de détail montre que, même si elle n'est pas affichée, la vue est en fait appelée lorsque le bouton est cliqué.

Edit: c'est là! La vue a été masquée par le séparateur, faites-la glisser vers la gauche pour voir la vue détaillée.

Edit 2: Xcode beta 2 donne un message "'NavigationView' n'est pas disponible dans macOS".

1
rougement