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

Posted

技术标签:

【中文标题】如何使用 UINavigationController (Swift 2.0 iOS 9) 强制设置横向方向【英文标题】:How to force set Landscape Orientation with UINavigationController (Swift 2.0 iOS 9) 【发布时间】:2015-12-13 00:51:32 【问题描述】:

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

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

然而,这在 ios 9 中已被弃用,并且找不到任何方法来强制使用 UINavigationController 进行旋转。我的应用程序主要使用纵向方向,只有一个视图需要是横向的。我需要在一个视图上强制横向并休息以保持纵向。任何帮助将不胜感激!

我检查的一些问题是:

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?

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:

如果这是你真正想做的事情,子类UINavigationController 然后添加这个代码:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 
    return .Landscape

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

【讨论】:

您好,感谢您的帮助!不幸的是,这仍然不起作用..:/ 在推动/弹出具有不同方向(例如,A -> 纵向、B -> 横向)的视图控制器时,如何强制改变方向?所以从 B->A 弹出应该产生纵向,而推动 A->B 应该产生横向。【参考方案2】:

我们也必须在我们的应用中做同样的事情。最初,我们使用 hack。但最终我们将“横向”VC 切换为模式而不是导航视图控制器堆栈的一部分。我建议你这样做。但如果你真的想这样做,你可以这样做。

子类导航 VC。 在 supportedInterfaceOrientaions 检查 VC 类型并返回适当的方向(你想要的横向,休息的纵向) 这本身不会将该 VC 自动旋转为横向,所以这是 hack。

在“风景”VC 的viewDidLoad/viewDidAppear 中,推送另一个通用 VC 对象并随后弹出它

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

这曾经在 iOS7 中工作,之后我们切换到模态。所以这可能现在可以在以后的版本中使用。

【讨论】:

谢谢!我尝试过,但出现错误 - DeviceOrientation[4624:222192] 不鼓励在分离的视图控制器上呈现视图控制器 是的,这也是我们的应用程序出现的一个问题,但这只是一个警告。要将 VC 呈现为模态,您需要将 segue 类型更改为 modal & 然后 performSegueWithIdentifier 。您需要自己添加导航栏,因为此模态 VC 不会成为 navigationVC 堆栈的一部分。所有其他常用的 VC api 应该返回适​​当的值 supportedInterfaceOrientations 应该返回 UIInterfaceOrientationMaskLandscape shouldAutorotate 应该返回 YES 不会有后退按钮,所以你应该在顶部栏中添加它。

以上是关于如何使用 UINavigationController (Swift 2.0 iOS 9) 强制设置横向方向的主要内容,如果未能解决你的问题,请参考以下文章

从 SwiftUI 推送到 UIViewController

viewController 出现时出现黑色

UINavigationController & SplitViewController

UINavigationController

UINavigationController 风格

全屏显示 ViewController