在 iOS 6(可能更早版本)中,如果视图控制器在设备旋转时不在屏幕上,它不会收到任何通知。willAnimateRotationToInterfaceOrientation:duration:
当它成为顶视图控制器时也不会被发送。
您需要跟踪视图控制器的当前方向并在viewWillAppear:
. 如果它们不同,您可以使用willAnimateRotationToInterfaceOrientation:duration:
它来正确设置它。
由于这可能是您经常做的事情,您可能希望创建一个通用超类,您的视图控制器从该超类继承。
一个典型的解决方案是:
@implementation MyHandlesOffscreenRotationController
{
BOOL isShowingPortrait;
}
- (void) viewDidLoad
{
[super viewDidLoad];
isShowingPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);
}
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
BOOL currIsPortrait = UIInterfaceOrientationIsPortrait(
[[UIApplication sharedApplication] statusBarOrientation]);
if ((isShowingPortrait && !currIsPortrait) ||
(!isShowingPortrait && currIsPortrait)) {
[self willAnimateRotationToInterfaceOrientation:
[[UIApplication sharedApplication] statusBarOrientation]
duration:0.0f];
}
}
@end