如何使用UINavigationController强制设置横向方向(Swift 2.0 iOS 9)

时间:2015-12-13 00:51:32

标签: ios swift uiviewcontroller uinavigationcontroller orientation

我试图找到一个解决方案,但是有太多的信息是行不通的。我的最后一次尝试是使用以下内容:

UIApplication.sharedApplication().setStatusBarOrientation(UIInterfaceOrientation.LandscapeRight, animated: false)

然而,这已经从iOS 9中弃用,并且无法找到任何强制旋转UINavigationController的方法。我的应用程序主要使用纵向方向,只有一个视图需要是Landscape。我需要在一个视图上强制使用Landscape并休息以保持为Portrait。任何帮助将非常感谢!

我检查过的一些问题是:

Setting device orientation in Swift iOS

How do I programmatically set device orientation in iOS7?

Why can't I force landscape orientation when use UINavigationController?

2 个答案:

答案 0 :(得分:3)

如果这是您真正想做的事情,请将子类UINavigationController添加到此代码中:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return .Landscape
}

试图强制定位是不明智的;最好告诉iOS你想要什么(如上所述),然后让它尽可能地计算方向。

答案 1 :(得分:0)

我们也必须在我们的应用程序中执行相同的操作。最初我们与黑客合作。但最终我们改变了#34; Landscape" VC到模态而不是导航视图控制器堆栈的一部分。我建议你那样做。但如果你真的想要,你就是这样做的。

子类导航VC。 在supportedInterfaceOrientaions检查VC类型&返回适当的方向(你想要的景观,休息的肖像) 这本身不会将VC自动旋转到横向,所以这就是黑客。

viewDidLoad/viewDidAppear" landscape" VC,推送另一个通用VC对象&随后弹出

UIViewController *c = [[UIViewController alloc]init];
[self presentViewController:c animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];

这曾经适用于iOS7&之后我们切换到模态。所以现在可能会在以后的版本中使用。