iOS Swift

【Swift】一画面だけ横向き固定にする

2022年3月21日

一部の画面だけ横向き固定にしたい場合などに行う画面回転制御について記載します。



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のある画面の場合

UINavigationControllerのある画面の場合、UIViewControllerへの設定だけでは回転の制御ができません。

UINavigationController側でもoverrideして、UIViewControllerのshouldAutorotatesupportedInterfaceOrientationsを呼び出すようにします。

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
    }
}



  • この記事を書いた人

ツシマ ショウヘイ

フリーランスのiOS/Androidアプリエンジニア。 自作アプリがストアのカテゴリ別ランキングで2位を達成!! 自分用のメモを兼ねてブログを始めました。