XcodeでiPadの画面回転を検知しようとしてハマった

iPad

最近アプリ制作にハマっているんですが、制作中にいろいろなことでまんまとハマります。

先ほどもまんまとハマっていたので備忘録的に記事アップ。

Xcode+Swiftでのデバイスの画面回転検知

画面の回転を検知する方法は至って簡単で、以下のコードを viewDidLoad もしくは viewDidAppear に書いて、セレクタに指定した関数(この場合は screenBuild())で受ければ良い。

        // 回転時にセレクタのメソッドを実行する
        NotificationCenter.default.addObserver(self, selector: #selector(screenBuid), name:UIDevice.orientationDidChangeNotification, object:nil)

なのにハマったiPadでの画面回転検知

ところがこれがうまくいかない。何度やってもうまくいかない。どういうわけかうまくいかない。

回転をするとどういうわけか縦が横になって、横が縦になる。っていってもよく分からないでしょうが、こういうわけです。

  • 通常表示(portrait) W: 810.0, H: 1080.0
  • 横向き表示(landscape) W: 1080.0, H: 810.0

が正しいんですが、これがまったく逆になってしまうんです。

画面の表示は普通なんですが、検知した縦横のサイズが逆になるんです。縦にしたときに横のサイズを吐き出して、横にしたときに縦のサイズを吐き出すという、なんともカオスな状況が生まれるわけです。

なんで?〜え?これだけ???

この状況ですったもんだ半日ほど悩みに悩んで、隅から隅までプロジェクトを見直して、結果解決した方法がこれ。

プロジェクトのTARGETの「Status Bar Style」の3つのチェックボックスが最初はどこにもチェックを入れてなかったんですが、真ん中のものにチェックを入れるとあら不思議。きちんと縦の時に縦のサイズを、横の時に横のサイズを検知するようになりました。

なんでなのかは今の私のスキルと知識ではさっぱりですが、弄り倒した結果に解決したということで、もうここは触りません勝つまでは。

ちなみにコードは一切変えてません。いや色々変えたんですが、結局は元に戻りました。

私の半日を返してほちい…。

コメント

タイトルとURLをコピーしました