SwiftUIプロジェクトがあります。 1つのビューを除いて、ポートレートモードとポートレートモードのみを許可します。 1つのビューのみで、縦向きと横向きの両方を許可したい。 Swiftにはいくつかのリソースがありますが、SwiftUIにはリソースが見つかりませんでした。
誰かがこれを達成する方法を見つけましたか?
上記の答えに対するいくつかの調整:
上記の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を使用する必要がありました。