Ich hatte in meinem Projekt ein ähnliches Problem. Es wird nur das Porträt unterstützt. Die ViewController-Struktur besteht darin, dass die Navigation einen Controller (ich habe A genannt) und eine lange Bildlaufansicht in einem Controller enthielt. Ich brauche A (Porträt) als Geschenk für B (Querformat rechts).
Am Anfang habe ich die folgende Methode ausprobiert und sie schien zu funktionieren, aber schließlich habe ich einen Fehler darin gefunden.
Swift 5 & iOS12
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscapeRight
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .landscapeRight
}
Und dann wird etwas seltsam. Wenn Controller B zu Controller A entlassen wird. Die ScrollView in Controller A wurde irgendwann verschoben.
Also habe ich eine andere Methode verwendet, also drehe ich den Bildschirm, wenn viewWillAppear
. Sie können den Code dafür unten sehen.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let appDel = UIApplication.shared.delegate as! AppDelegate
appDel.currentOrientation = .landscapeRight
UIDevice.current.setValue( UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
UIViewController.attemptRotationToDeviceOrientation()
}
override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
let appDel = UIApplication.shared.delegate as! AppDelegate
appDel.currentOrientation = .portrait
UIDevice.current.setValue( UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
UIViewController.attemptRotationToDeviceOrientation()
super.dismiss(animated: true, completion: nil)
}
var currentOrientation : UIInterfaceOrientationMask = .portrait
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return self.currentOrientation
}