"Portrait"に設定しても画面が横向きになってしまう
現在業務で開発しているiOSアプリ(iOS5以上を対象)の動作確認をしていたときに、
iOS6.xでは発生しないが、iOS5.xだと"Supported interface orientations"を"Portrait"に設定しているのに画面が横向きになってしまう
という不具合が見つかりました。
原因は、あるUIViewControllerのクラスのソースに
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
という記述があったからです。
デバイスの向きに変更があったときに呼び出される処理で、上の記述だと「検出された向きが上下逆さま以外のときにはその向きに対応する」となってしまっています。
なので縦向きのみに対応するよう以下のように書き換える、
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); }
またはこのメソッド自体削除してしまってもOK。
iOS6ではなぜ問題なかったかというと、"shouldAutorotateToInterfaceOrientation"メソッドはiOS6では動かなくなってしまったようだ(参考サイト:shouldAutorotateToInterfaceOrientation:はdeprecatedだよ!)。
「上下逆さま以外の向きに対応」の記述が混じってしまったのは、プロジェクトを作成したときにデフォルトで生成されるUIViewControllerをそのまま使用していたのですが、そこには上記のような記述がはじめから書かれているのが原因だったようです(Xcodeのバージョンにもよるのかもしれませんが)。
いずれにせよ"Portrait"に設定しているのに画面が横向きになってしまうなんてことがあれば、上記メソッドの確認をしてみると解決するかもしれません。