web-dev-qa-db-fra.com

SwiftUI Force Portrait sur tous sauf une vue

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?

6
berkabbasoglu

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.

2
Zenman C