環境は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