日々精進

新しく学んだことを書き留めていきます

iOS7でアラートビューを閉じた後、- (void)willRotateToInterfaceOrientation:duration:が呼ばれない

環境はiOS7。
再現手順は以下。
・端末が縦向きの状態でアラートビューを表示する
・端末を横向きにする
・アラートビューのボタンをタップしてアラートビューを消す
・ステータスバーが横向きになる。
 が、- (void)willRotateToInterfaceOrientation:duration:が呼ばれない。
 音量ボタンを押すと、横向きに音量のビューが出るので、iOSは画面が横向きであると認識してるっぽい。
 毎回こうなるわけではなく、ステータスバーが横向きにならない場合もある。


解決策はAppDelegate.mに以下を追加すること。

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration  {
    [UIViewController attemptRotationToDeviceOrientation];
}

これを追加すると、ステータスバーが横向きになった場合必ず- (void)willRotateToInterfaceOrientation:duration:が呼ばれるようになる。
しかし、アラートビューを閉じたときにステータスバーが横向きになったりならなかったりするという問題は残る。


回転周りは謎な現象が多い。。
参考:ios7 - rotation problems when a UIAlertView is showing in iOS 7 - Stack Overflow