【发布时间】:2014-01-26 01:22:58
【问题描述】:
我正在开发一个 iPad 应用程序,使用 AutoLayout,如果用户启用某种模式(“抬头”模式),我只想支持纵向(或纵向倒置)方向,此外,如果设备处于横向模式,我想自动切换到纵向模式。
在顶视图控制器中,我有以下内容:
- (NSUInteger) supportedInterfaceOrientations {
if (self.modeHeadsUp) {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (BOOL) shouldAutorotate {
return TRUE;
}
根据我在这里其他地方看到的答案,答案似乎是我应该使用“应用程序 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];
我意识到 Apple 希望将设备方向留给用户。但是,我希望能够在不处于“单挑”模式时支持横向模式。
我是否遗漏了一些能够强制改变方向的东西?
【问题讨论】:
标签: ios xcode ios7 autolayout autorotate