Problème: une vue sur Pad apparaît avec indésirable vue partagée.
Ma configuration actuelle est: Catalina OSX beta 5 + Xcode 11 Beta 5
Voici le code que j'ai utilisé, avec une vue de navigation et un titre de navigation:
import SwiftUI
struct SwiftUIView: View {
var body: some View {
NavigationView {
Text("Search")
.navigationBarTitle(Text("Search"))
}
}
}
#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
#endif
Lorsque simulé sur iPad (appareil physique et aperçu) au lieu d'une vue plein écran, j'obtiens cette vue d'écran partagé:
Si je n'ai qu'une vue, sans NavigationView, j'obtiens une vue plein écran:
import SwiftUI
struct SwiftUIView: View {
var body: some View {
Text("Hello World!")
}
}
#if DEBUG
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
}
#endif
Comment puis-je créer un plein écran NavigationView (pas un écran partagé) sur iPad?
Vous pouvez appliquer le modificateur .navigationViewStyle(StackNavigationViewStyle())
à NavigationView!
...
NavigationView {
Text("Hello world!")
}
.navigationViewStyle(StackNavigationViewStyle())
...
Edit: Ci-dessous, je réponds aux questions d'Alexandre de son commentaire:
Pourquoi la vue complète n'est pas la valeur par défaut pour l'iPad? Ce n'est qu'un choix fait par Apple ...
Pourquoi ce modificateur va à l'extérieur de la fermeture de NavigationView, alors que le titre de navigation va à l'intérieur ... Peut-être que cela donne des éclaircissements: https: // stackoverflow .com/a/57400873/11432719
Pour utiliser ce style divisé pour iPad mais supprimer pour iPhone:
extension View{
func phoneOnlyStackNavigationView() ->some View{
if UIDevice.current.userInterfaceIdiom == .phone{
return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
}else{
return AnyView(self)
}
}
}