【发布时间】:2014-12-09 00:45:34
【问题描述】:
在 iOS 8 之前,我们将以下代码与 supportedInterfaceOrientations 和 shouldAutoRotate 委托方法结合使用,以强制应用程序方向为任何特定方向。我使用下面的代码 sn-p 以编程方式将应用程序旋转到所需的方向。首先,我正在更改状态栏方向。然后只需呈现并立即关闭模态视图即可将视图旋转到所需的方向。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
但这在 iOS 8 中失败了。另外,我在堆栈溢出中看到了一些答案,人们建议我们应该从 iOS 8 开始避免这种方法。
更具体地说,我的应用程序是一种通用类型的应用程序。一共有三个控制器。
First View 控制器- 它应该支持 iPad 中的所有方向,并且只支持 iPhone 中的纵向(主页按钮向下)。
第二视图控制器- 它应该在所有情况下都只支持横向
第三视图控制器- 它应该在所有条件下仅支持横向
我们正在使用导航控制器进行页面导航。从第一个视图控制器,在按钮单击操作中,我们将第二个压入堆栈。因此,当第二个视图控制器到达时,无论设备方向如何,应用都应该只锁定横向。
下面是我在第二个和第三个视图控制器中的shouldAutorotate 和supportedInterfaceOrientations 方法。
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}
-(BOOL)shouldAutorotate {
return NO;
}
是否有任何解决方案或任何更好的方法来锁定 iOS 8 的特定方向的视图控制器。请帮助!!
【问题讨论】:
-
实现您在介绍的 VC 中提到的方法通常应该可以工作(至少这是我在iOS 8 中的经验)。也许您的特定设置会导致问题?
-
也许我可以让这个问题更清楚一点。我会稍微修改一下这个问题。
-
@VladimirGritsenko:请立即查看。我已经编辑过了。
-
问题中的代码不使用导航控制器的堆栈,而是使用模态表示,所以仍然不清楚你在做什么。我会说,在我们的代码中,从 shouldAutoRotate 返回 YES 并从 presented VC 中的 supportedInterfaceOrientations 返回所需的方向正确地定位了该 VC。
-
嗯,这并不是真正的失败,这只是概念上的重大变化。是否是好的改变完全是另一个话题。
标签: ios objective-c ios8 uinavigationcontroller autorotate