Swift
Swift3.0
swift3

ViewControllerごとに画面の向きを固定する

More than 1 year has passed since last update.

ViewControllerごとに画面の向きを固定するには、


  • shouldAutorotate

  • supportedInterfaceOrientations

をオーバーライドすればいい


MyViewController.swift

class MyViewController: UIViewController {

...
// 画面を自動で回転させるか
override var shouldAutorotate: Bool {
get {
return false
}
}

// 画面の向きを指定
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
get {
return .portrait
}
}
...
}


ただ、


  • UINavigationController

  • UITabBarController

  • UIPageViewController

なんかを使ってるとMyViewControllerに書いても動いてくれない

MyNavigationControllerを作ってもいいけれど、これだけのために用意するのは少々面倒なので、AppDelegateに以下を追加して対応


AppDelegate.swift

extension UINavigationController {

open override var shouldAutorotate: Bool {
guard let viewController = self.visibleViewController else { return true }
return viewController.shouldAutorotate
}

open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let viewController = self.visibleViewController else { return .all }
return viewController.supportedInterfaceOrientations
}
}


これで、各ViewControllerでオーバーライドした設定がちゃんと反映された