【Xcode/Swift】画面の回転を固定する方法を2パターン紹介〜Xcode13からDevice Orientationが効かなくなった?〜

この記事では、画面の回転を固定する方法を紹介する。

画面回転とは?

シミュレーターを起動し、command + を押すと、以下のように画面が回転する。

アプリによっては、画面を横にしたときに、横向きにしたくない場合があると思います。あと、横のレイアウトに対応するのがめんどくさいとかで縦画面固定にすることがよくあります。

今回はその方法を2パターンご紹介します。

パターン1:xcodeprojで設定する方法

①プロジェクト名をクリック
②TARGETSをクリック
③Generalをクリック
④Device OrientationをPortraitのみにチェックを入れる

.portrait 通常の向き
.portraitUpsideDown 逆さま
.landscapeLeft 左向き
.landscapeRight 右向き

Xcode13だと効かない件

上記の設定でできるはずだが、Xcode13で新規プロジェクトを作成すると、上記の設定が効かないです。。。

参考 Device Orientation BugApple Developer Forums

理由

Info.plistで設定できていたSupported interface orientations (iPhone)の位置が変更されたから。(Xcode13のバグ)

解決方法

①プロジェクトを選択
②TARGETSを選択
③Infoを選択
Supported interface orientations (iPhone)の中身を書き換える

上記の設定は、GUIでInfo.plistの内容を書き換える設定です。それが効かないので、直接変えちゃおうという話です。

パターン2:コードで書き換える

こちらの方が正確で柔軟よく修正できる。

以下のコードをViewControllerに貼り付ける。こちらのコードは回転そのものをさせないようにする。

override var shouldAutorotate: Bool {
    return false
}

return trueにすると回転するようになる。

ただ、上記のコードだけでは、横画面で開いた時、横画面で表示されてしまう。そのため、以下のコードも付け足す。

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

ちなみに、.portraitのところを変えると、縦画面以外にも固定できる。