この記事では、画面の回転を固定する方法を紹介します。また、Xcode13から何故か効かない理由に関しても解説しています。
画面回転とは?
シミュレーターを起動し、command + ←を押すと、以下のように画面が回転します。
アプリによっては、画面を横にしたときに、横向きにしたくない場合があると思います。あと、横のレイアウトに対応するのがめんどくさいとかで縦画面固定にすることがよくあります。
今回はその方法を2パターンご紹介します。
パターン1:xcodeprojで設定する方法
①プロジェクト名をクリック
②TARGETSをクリック
③Generalをクリック
④Device OrientationをPortrait
のみにチェックを入れる
プロパティ | 意味 |
---|---|
.portrait |
通常の向き |
.portraitUpsideDown |
逆さま |
.landscapeLeft |
左向き |
.landscapeRight |
右向き |
Xcode13だと効かない件
上記の設定でできるはずだが、Xcode13で新規プロジェクトを作成すると、上記の設定が効かないです。。。
参考 Device Orientation BugApple Developer ForumsXcodeの画面固定のチェックボックス、どれにチェック入れようが入れまいがなーんも変わらんくてブチ切れてる
— ハンバーグ2 (@Hamburg_Ag2O) October 7, 2021
理由
Info.plist
で設定できていたSupported interface orientations (iPhone)
の位置が変更されたから。(Xcode13のバグ?)
解決方法
①プロジェクトを選択
②TARGETSを選択
③Infoを選択
④Supported interface orientations (iPhone)
の中身を書き換える
上記の設定は、GUIでInfo.plist
の内容を書き換える設定です。それが効かないので、直接変えちゃおうという話です。
プロジェクト内のInfo.plistにはありませんので、必ずTERGETSの中のInfo.plistを修正してください。
ちなみに、
Supported interface orientations (iPhone)
Supported interface orientations (iPad)
Supported interface orientations
の3種類あります。上記の対応のようにiPhoneだけやるとiPhoneだけになります。おそらく、GeneralのチェックマークがSupported interface orientations
にのみ聞いてるっぽいです。なのでiPadもやるとなると、iPadも上記のようにitem0(Portrait)以外削除してください。
パターン2:コードで書き換える
こちらの方が正確で柔軟に修正できます。
以下のコードをViewController
に貼り付ける。こちらのコードは回転そのものをさせないようにする。
override var shouldAutorotate: Bool { return false }
return true
にすると回転するようになる。
ただ、上記のコードだけでは、横画面状態でアプリ開いた時、そのまま横画面で表示されてしまう。そのため、以下のコードも付け足す。
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .portrait }
ちなみに、.portrait
のところを変えると、縦画面以外にも固定できる。