一部の画面だけ横向き固定にしたい場合などに行う画面回転制御について記載します。
Device Orientationを設定する
[TARGET] > [General] > [Deployment Info]のDevice Orientationの全てにチェックを入れる
UIViewControllerをoverrideする
下記コードで画面の回転を許可するかどうかを設定します。
// 画面の回転を許可するかどうか
override var shouldAutorotate: Bool {
// 回転を許可しない
return false
}
下記コードで回転の向きを指定します。
// 回転の向きを指定
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
// 横(左)表示
return .landscapeLeft
}
向きの種類
縦 :.portrait
横(左) :.landscapeLeft
横(右) :.landscapeRight
逆さま :.portraitUpsideDown
横(左右):.landscape
全て :.all
逆さま以外:.allButUpsideDown
UINavigationControllerのある画面の場合、UIViewControllerへの設定だけでは回転の制御ができません。
UINavigationController側でもoverrideして、UIViewControllerのshouldAutorotate
、supportedInterfaceOrientations
を呼び出すようにします。
extension UINavigationController {
open override var shouldAutorotate: Bool {
guard let viewController = self.visibleViewController else { return true }
return viewController.shouldAutorotate
}
override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let viewController = self.visibleViewController else { return .portrait }
return viewController.supportedInterfaceOrientations
}
}