1つのUIViewController
の回転を防止しようとしていますが、それを達成できません。
私はこのようなことをしています:
open override var shouldAutorotate: Bool {
get {
return false
}
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
get {
return .portrait
}
}
そして、UIViewControler
はまだ回転しています。 UIViewControllerは、モーダルで開かれたUINavigationController内にあります。
私はここから多くの質問を見てきましたが、答えはありません。
In Swift 2 shouldAutorotate
をオーバーライドするために使用していましたが、in Swift 3ではその関数はもう存在しません。
Swift 3でSwift 2?
この振る舞いを何度も再現できるのであれば、なぜ質問を終了する投票になるのか分かりません。 UIViewController
は、モーダルで開かれたUINavigationController
の中にあります。
これは私が問題を解決するためにしたことです。
このクラスを作成し、回転させないようにするUINavigationController
を含むUIViewController
に設定します
class NavigationController: UINavigationController {
override var shouldAutorotate: Bool {
return false
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
}
そしてそれはそれ、私のために働く
このコードをAppDelegate.Swiftに追加します
var orientationLock = UIInterfaceOrientationMask.all
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return self.orientationLock
}
struct AppUtility {
static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
if let delegate = UIApplication.shared.delegate as? AppDelegate {
delegate.orientationLock = orientation
}
}
static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
self.lockOrientation(orientation)
UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
}
}
方向を強制するviewcontrollerに追加します。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//let value = UIInterfaceOrientation.landscapeLeft.rawValue
//UIDevice.current.setValue(value, forKey: "orientation")
AppDelegate.AppUtility.lockOrientation(.landscapeLeft)
}
私にとって、投票された答えはうまくいきませんでした。代わりに、
override open var shouldAutorotate: Bool {
return false
}
override open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return UIApplication.shared.statusBarOrientation
}
これらのコードは機能します。 Swift 4。
UIApplicationDelegate
クラスに次のAppDelegate
メソッドを実装していない限り、iOS 11はこれらのメソッドをまったく呼び出していませんでした。
application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?)