横向 View Controller App Delegate
Landscape orientation View Controller App Delegate
我正在尝试仅将一个视图控制器置于横向模式,将其他视图控制器置于纵向模式。
首先,我尝试使每个 View Controller 的旋转无效,除了我想要的那个(shouldAutoRotate false,只有 Portrait,...),但是我有一个 Navigation Controller,它重叠带有状态栏的导航栏,我无法解决它。所以在那之后,我尝试清理我所做的一切,并仅从 AppDelegate 启用或禁用方向。
这是我找到并尝试过的代码:
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 controller 是 SecondViewController)。
那么知道如何检查我是否处于可以指定方向的特定 VC 中吗?
提前致谢!
检查此递归方法以获取当前 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)
}
我正在尝试仅将一个视图控制器置于横向模式,将其他视图控制器置于纵向模式。
首先,我尝试使每个 View Controller 的旋转无效,除了我想要的那个(shouldAutoRotate false,只有 Portrait,...),但是我有一个 Navigation Controller,它重叠带有状态栏的导航栏,我无法解决它。所以在那之后,我尝试清理我所做的一切,并仅从 AppDelegate 启用或禁用方向。
这是我找到并尝试过的代码:
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 controller 是 SecondViewController)。
那么知道如何检查我是否处于可以指定方向的特定 VC 中吗?
提前致谢!
检查此递归方法以获取当前 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)
}