我正在开发一个 iPad 应用程序,使用 AutoLayout,如果用户启用某种模式(“抬头”模式) ,我希望只支持纵向(或纵向倒置)方向,此外,如果设备是横向的,我希望自动切换到纵向模式。
在 top view 控制器中,我有以下内容:
- (NSUInteger) supportedInterfaceOrientations {
if (self.modeHeadsUp) {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (BOOL) shouldAutorotate {
return TRUE;
}
根据我在这里其他地方看到的答案,答案是 看起来,我应该使用“ application setStatusBarOriation”。因此,在用户选择“提醒”模式的方法中,我包括:
UIApplication *application = [UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationPortrait
animated:YES];
然而,这似乎没有任何作用。虽然我可以物理地移动设备使其旋转成肖像,但它不会自动这样做。
事实上,当在横向模式下运行以上代码尝试通过编程方式设置方向时,当我使用以下代码查询应用程序“ statusBarOrient”时,横向模式仍然是“4”:
UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];
似乎自动布局并没有被 setStatusBarOrient 触发,所以我尝试在后面添加这段代码,但是没有效果:
[super updateViewConstraints];
[self.view updateConstraints];
我意识到苹果想把设备定位留给用户。然而,我希望能够支持横向模式时,不在“提醒”模式。
我是不是错过了什么能够强制改变方向的东西?