Après avoir cliqué sur le sélecteur, il accède à la vue de sélection. La liste des éléments est rendue trop loin du haut, mais s'accroche une fois l'animation terminée. Pourquoi cela arrive-t-il?
Démo: https://gfycat.com/idioticdizzyazurevase
J'ai déjà créé un exemple minimal pour exclure les titres et boutons de la barre de navigation, les sections de formulaire et d'autres détails:
import SwiftUI
struct NewProjectView: View {
@State var name = ""
var body: some View {
NavigationView {
Form {
Picker("Client", selection: $name) {
Text("Client 1")
Text("Client 2")
}
}
}
}
}
struct NewProjectView_Previews: PreviewProvider {
static var previews: some View {
NewProjectView()
}
}
Cela se produit en mode aperçu, sur simulateur et sur l'appareil (Xcode 11.2, iOS 13.2 dans le simulateur, 13.3 beta 1 sur l'appareil).
Le comportement évidemment bogué peut être contourné lors du forçage du style de vue de navigation à empiler:
NavigationView {
…
}.navigationViewStyle(StackNavigationViewStyle())
Ceci est une solution à mon problème, mais je ne la marquerai pas (comme encore) comme une réponse acceptée.
Jusqu'à ce que ce bogue soit résolu, une autre façon de contourner ce problème tout en conservant DoubleColumnNavigationViewStyle pour iPad serait de définir ce style de manière conditionnelle:
let navView = NavigationView {
…
}
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(navView.navigationViewStyle(DoubleColumnNavigationViewStyle()))
} else {
return AnyView(navView.navigationViewStyle(StackNavigationViewStyle()))
}
À mon avis, cela a quelque chose à voir avec la barre de navigation. Par défaut (aucune mention de l'extension .navigationBarTitle
), Le mode d'affichage de la navigation est réglé sur .automatic
, Ceci doit être modifié en .inline
. Je suis tombé sur un autre article similaire à celui-ci et j'utilise leur solution pour la combiner avec la vôtre, en utilisant .navigationBarTitle("", displayMode: .inline)
devrait aider.
import SwiftUI
struct NewProjectView: View {
@State var name = ""
var body: some View {
NavigationView {
Form {
Picker("Client", selection: $name) {
Text("Client 1")
Text("Client 2")
}
}
.navigationBarTitle("", displayMode: .inline)
}
}
}
struct NewProjectView_Previews: PreviewProvider {
static var previews: some View {
NewProjectView()
}
}