Mon application a des besoins de navigation simples
J'ai cette configuration et je travaille sur iPhone, mais lorsque je lance l'application sur iPad en mode portrait, la liste principale est toujours masquée.
J'utilise .isDetailLink(false)
sur le lien de navigation de la première liste à la seconde, donc les deux listes restent toujours dans la colonne principale. En mode iPad, tout fonctionne comme prévu, mais en mode portrait, la vue détaillée remplit l'écran. Je peux glisser depuis le côté gauche de l'écran pour afficher la liste, mais je voudrais apporter plus de clarté à l'utilisateur.
Je voudrais afficher ou ajouter le bouton de retour pour afficher le côté maître/liste (un peu comme le Apple = Application Notes) Sur l'iPhone j'obtiens le bouton de retour par défaut mais sur l'iPad en mode portrait il n'y a rien à sa place.
C'est ce que je vois sur iPhone
Mais c'est ce que je vois sur iPad
struct ParentList: View {
let firstList = ["Sample data 01", "Sample data 02", "Sample data 03", "Sample data 04", "Sample data 05"]
var body: some View {
NavigationView {
List{
ForEach(firstList, id: \.self) { item in
NavigationLink(destination: ChildList()){
Text(item)
}
.isDetailLink(false)
}
}
}
}
}
struct ChildList: View {
let secondList = ["More Sample data 01", "More Sample data 02", "More Sample data 03", "More Sample data 04", "More Sample data 05"]
var body: some View {
List{
ForEach(secondList, id: \.self) { item in
NavigationLink(destination: ChildDetail()){
Text(item)
}
}
}
}
}
struct ChildDetail: View {
var body: some View {
Text("Child detail view")
}
}
Mise à jour: Au 17 octobre 2019, je n'avais pas trouvé de moyen de faire fonctionner cela. J'ai décidé d'utiliser .navigationViewStyle(StackNavigationViewStyle())
pour le moment. Fait intéressant, cela doit aller à l'extérieur de la vue de navigation comme un modificateur normal, pas à l'intérieur avec le titre de navigation.
En mode portrait, la vue fractionnée par défaut ne fonctionne pas. Cela peut être résolu à l'avenir, mais il semble que les options actuelles soient:
(a) changez le style de vue de navigation de votre première liste en .navigationViewStyle (StackNavigationViewStyle () pour que la navigation fonctionne comme sur iPhone et pousse chaque vue.
(b) laissez le style par défaut et ne supportez que le paysage pour iPad
(c) implémenter un contrôleur de vue fractionnée UIKit
Il existe également une solution de contournement assez hacky (voir https://stackoverflow.com/a/57215664/3187762 )
En ajoutant .padding () à la NavigationView, il semble obtenir le comportement de toujours afficher le maître.
NavigationView {
MyMasterView()
DetailsView()
}.navigationViewStyle(DoubleColumnNavigationViewStyle())
.padding()
Je ne sais pas si c'est prévu. Peut se casser à l'avenir (fonctionne avec Xcode 11.0, dans le simulateur sur iOS 13.0 et l'appareil avec 13.1.2).
Vous ne devez pas vous y fier. Ce commentaire semble être la meilleure réponse: https://stackoverflow.com/a/57919024/3187762
dans iOS 13.4, un bouton "retour à la vue principale" a été ajouté à la disposition de l'iPad. D'après les notes de version:
Lorsque vous utilisez un NavigationView avec plusieurs colonnes, la barre de navigation affiche désormais un contrôle pour basculer entre les colonnes. (49074511)