在平时开发中,我们经常会忽略一个问题,就是当我们的App内有需要横屏的页面,而首页只支持竖屏,在plus的设备上,桌面是运行横屏的,此时进入App,首页布局会出错。在延伸一下这个问题,当我们开发一款支持iPad的App时,如何保证App在任何情况下进入首页都保持竖屏状态?
方法一、
我们可以这样设置首页的控制器:
// 必须两个都是 .portrait才可以
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
}
如果有UITabBarController,这样设置:
// 必须两个都是 .portrait才可以
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return selectedViewController?.supportedInterfaceOrientations ?? .portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
}
如果有 UINavigationController,这样设置:
// 必须两个都是 .portrait才可以保证首页一定是竖屏
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return topViewController?.supportedInterfaceOrientations ?? .portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
}
方法二、
设置一个全局的变量
var isAllowLandscape: Bool = false
在AppDelegate中设置:
// 控制整个App所允许旋转的方向
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return isAllowLandscape ? .allButUpsideDown : .portrait
}
在需要的时候改变 isAllowLandscape的值即可。