web-dev-qa-db-ja.com

1つのビューを除くすべてのビューでSwiftUI Force Portrait

SwiftUIプロジェクトがあります。 1つのビューを除いて、ポートレートモードとポートレートモードのみを許可します。 1つのビューのみで、縦向きと横向きの両方を許可したい。 Swiftにはいくつかのリソースがありますが、SwiftUIにはリソースが見つかりませんでした。

誰かがこれを達成する方法を見つけましたか?

6
berkabbasoglu

上記の答えに対するいくつかの調整:

上記のJonathanの答えとしてのAppDelegateでは:

static var orientationLock = 
UIInterfaceOrientationMask.portrait

func application(_ application: UIApplication, 
supportedInterfaceOrientationsFor window: 
UIWindow?) -> UIInterfaceOrientationMask {
return AppDelegate.orientationLock
}

次に、「destinationView」-横向きのもの:

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()
        }
    }
}
}

「LongValue」エラーを取り除くUIDevice行の.rawValueに注意してください。また、.onDisappearでは、縦向きの前のビューに戻るときにエラーを回避するために、DispatchQueue.main.asyncを使用する必要がありました。

2
Zenman C