我正在使用此应用程序,我需要所有视图控制器,但一个需要纵向显示。我特别需要一个单一的视图控制器,使其能够旋转至手机所处的方向。
为此,我以模态形式呈现(未嵌入NavigationController中)
所以(例如)我的结构是这样的:
现在,无论何时我在横向位置关闭模态视图控制器,即使它不支持该方向,我的父视图控制器也会旋转。
应用程式中的全部UIViewControllers和UINavigaionControllers都继承自已实现这些方法的相同通用类:
UIViewControllers
UINavigaionControllers
override func supportedInterfaceOrientations() -> Int { return Int(UIInterfaceOrientationMask.Portrait.toRaw()) }
我的模态视图控制器再次重写此方法,它看起来像这样:
override func supportedInterfaceOrientations() -> Int { return Int(UIInterfaceOrientationMask.All.toRaw()) }
更新1
看来这仅在iOS8 Beta上发生。有人知道视图控制器的旋转是否发生了变化,或者仅仅是Beta中的错误?
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { if ([self.window.rootViewController.presentedViewController isKindOfClass: [SecondViewController class]]) { SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController; if (secondController.isPresented) return UIInterfaceOrientationMaskAll; else return UIInterfaceOrientationMaskPortrait; } else return UIInterfaceOrientationMaskPortrait; }
对于斯威夫特
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int { if self.window?.rootViewController?.presentedViewController? is SecondViewController { let secondController = self.window!.rootViewController.presentedViewController as SecondViewController if secondController.isPresented { return Int(UIInterfaceOrientationMask.All.toRaw()); } else { return Int(UIInterfaceOrientationMask.Portrait.toRaw()); } } else { return Int(UIInterfaceOrientationMask.Portrait.toRaw()); } }
有关更多详细信息,请检查此链接