我正在开发一个iPad应用程序,使用AutoLayout。如果用户启用了某种模式(“悬浮”模式),我希望仅支持竖屏(或倒置的竖屏)方向,并且如果设备处于横屏状态,我想自动切换到竖屏模式。
在顶部视图控制器中,我有以下内容:
- (NSUInteger) supportedInterfaceOrientations {
if (self.modeHeadsUp) {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (BOOL) shouldAutorotate {
return TRUE;
}
根据我在其他地方看到的答案,似乎应该使用"application setStatusBarOrientation"。因此,在用户选择“heads-up”模式的方法中,我已包含如下内容: UIApplication *application = [UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationPortrait
animated:YES];
然而,这似乎并没有起到任何作用。尽管我可以通过物理移动设备来使其旋转为竖屏模式,但它并不会自动旋转。
事实上,当我运行上述代码尝试以编程方式设置方向后,在横屏模式下,当我使用以下代码查询应用程序“statusBarOrientation”时,它仍保持在“4”(表示横屏):
UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];
似乎在调用setStatusBarOrientation时没有触发自动布局,所以我尝试在其后添加了这段代码,但效果不佳:
[super updateViewConstraints];
[self.view updateConstraints];
我知道苹果希望将设备方向掌握在用户手中。不过,当处于非“heads-up”模式时,我希望能支持横屏模式。
我是否遗漏了什么来强制更改方向?