J'ai un projet SwiftUI. Pour toutes les vues sauf une, je souhaite autoriser le mode portrait et uniquement le mode portrait. Pour une seule vue, je souhaite autoriser le portrait et le paysage. Il y a des ressources sur Swift mais je n'en ai pas trouvé sur SwiftUI.
Quelqu'un a-t-il trouvé un moyen d'accomplir cela?
Quelques ajustements à la réponse ci-dessus:
Dans AppDelegate comme réponse de Jonathan ci-dessus:
static var orientationLock =
UIInterfaceOrientationMask.portrait
func application(_ application: UIApplication,
supportedInterfaceOrientationsFor window:
UIWindow?) -> UIInterfaceOrientationMask {
return AppDelegate.orientationLock
}
Puis dans le 'destinationView' - celui qui est paysage:
import SwiftUI
struct DestinationView: View {
var body: some View {
Group {
Text("Hello")
}.onAppear {
AppDelegate.orientationLock = UIInterfaceOrientationMask.landscapeLeft
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
.onDisappear {
DispatchQueue.main.async {
AppDelegate.orientationLock = UIInterfaceOrientationMask.portrait
UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UINavigationController.attemptRotationToDeviceOrientation()
}
}
}
}
Notez le .rawValue dans la ligne UIDevice qui élimine l'erreur "LongValue". De plus, dans le .onDisappear, j'ai dû utiliser DispatchQueue.main.async afin d'éviter une erreur lors du retour à la vue précédente qui est en portrait.