有什么方法可以在应用程序中仅在一个视图控制器中允许横向模式?
您自己已经回答了这个问题,请参阅 UIViewController 类参考中的“配置视图旋转设置”。您需要配置您的应用程序以支持您想要的所有旋转,然后覆盖每个视图控制器,是的,这很乏味,但它可以工作:)
处理视图旋转 从 iOS 8 开始,所有与旋转相关的方法都已弃用。相反,旋转被视为视图控制器视图大小的变化,因此使用 viewWillTransitionToSize:withTransitionCoordinator: 方法报告。当界面方向改变时,UIKit 在窗口的根视图控制器上调用此方法。然后,该视图控制器通知其子视图控制器,在整个视图控制器层次结构中传播消息。
在 iOS 6 和 iOS 7 中,您的应用支持在应用的 Info.plist 文件中定义的界面方向。视图控制器可以覆盖supportedInterfaceOrientations 方法来限制支持的方向列表。通常,系统仅在窗口的根视图控制器或呈现为填满整个屏幕的视图控制器上调用此方法;子视图控制器使用其父视图控制器为它们提供的窗口部分,不再直接参与有关支持哪些旋转的决策。应用程序的方向掩码和视图控制器的方向掩码的交集用于确定视图控制器可以旋转到哪些方向。
你可以覆盖一个视图控制器的 preferredInterfaceOrientationForPresentation,该视图控制器旨在以特定方向全屏显示。
当可见视图控制器发生旋转时,将在旋转期间调用 willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation: 方法。viewWillLayoutSubviews 方法也会在视图被其父级调整大小和定位后调用。如果在方向更改发生时视图控制器不可见,则永远不会调用旋转方法。但是,viewWillLayoutSubviews 方法在视图变得可见时被调用。您对此方法的实现可以调用 statusBarOrientation 方法来确定设备方向。
编辑
你也可以看看UIApplicationDelegate Protocol,它有方法
func application(application: UIApplication,
supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask
从文档中:
讨论
此方法返回应用程序支持的界面方向的总集。在确定是否旋转特定视图控制器时,此方法返回的方向与根视图控制器或最顶层呈现的视图控制器支持的方向相交。应用程序和视图控制器必须在允许旋转之前达成一致。
如果您不实现此方法,则应用会使用应用的 Info.plist 的 UIInterfaceOrientation 键中的值作为默认界面方向。