如何使用 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] 不鼓励在分离的视图控制器上呈现视图控制器performSegueWithIdentifier
。您需要自己添加导航栏,因为此模态 VC 不会成为 navigationVC 堆栈的一部分。所有其他常用的 VC api 应该返回适当的值 supportedInterfaceOrientations
应该返回 UIInterfaceOrientationMaskLandscape
shouldAutorotate
应该返回 YES
不会有后退按钮,所以你应该在顶部栏中添加它。以上是关于如何使用 UINavigationController (Swift 2.0 iOS 9) 强制设置横向方向的主要内容,如果未能解决你的问题,请参考以下文章
从 SwiftUI 推送到 UIViewController