我试图只在景观模式下放置一个视图控制器,在纵向模式下放置其他视图控制器。
首先,我试图使每个View Controller的旋转无效,除了我想要的那个(使用shouldAutoRotate false,只有Portrait,...),但是我使用的是导航控制器,它与Nav重叠有状态栏的栏,我无法解决。所以在那之后,我试图清理我所做的一切,并从AppDelegate启用或禁用Orientation。
所以这是我找到并试过的代码:
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.rawValue);
} else {
return Int(UIInterfaceOrientationMask.Portrait.rawValue);
}
} else {
return Int(UIInterfaceOrientationMask.Portrait.rawValue);
}
}
但是这个代码永远不会出现在第一个if中(即使View控制器是SecondViewController)。
那么我是否知道如何检查我是否在指定方向的特定VC?
提前致谢!
答案 0 :(得分:1)
检查这个获取当前viewController的递归方法
func getCurrentViewController(viewController:UIViewController?)-> UIViewController?{
if let tabBarController = viewController as? UITabBarController{
return getCurrentViewController(tabBarController.selectedViewController)
}
if let navigationController = viewController as? UINavigationController{
return getCurrentViewController(navigationController.visibleViewController)
}
if let viewController = viewController?.presentedViewController {
return getCurrentViewController(viewController)
}else{
return viewController
}
}
并在支持的定位方法上使用它,如下所示
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> Int {
if let currentVC = getCurrentViewController(self.window?.rootViewController) as? SecondViewController{
return Int(UIInterfaceOrientationMask.All.rawValue)
}
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}