一些夸张的UI Bug可能都与旋转问题有关
写在开头:每一名开发者都有一颗成为大牛的心,但是至于你是否能够成功,坚持往下走就对了。
旋转的基本开关
你应该知道的基本开关:
OK,我的建议是如果是iPhone的话,开启portriat、landscape left、landscape right。iPad应用的话四种全开。
整个应用的旋转思想
www.jianshu.com/p/59732e924…
推荐这个文章用来解决你的APP整体旋转解决方案:基本的思路是在基类中做事情。
之后继承基类的VC,如果需要定制旋转方向的话,那么你需要重写下面两个属性:
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
Mutible WIndows 的旋转问题处理
这类旋转问题的可能性主要存在于2个及2个以上的WIndow的处理,我这边主要是针对于两个Window所做的处理,如果Window的数目不断增加,我这个方案的适用性确实是值得商榷的。
下面说一下我这个方案的主要思路 :
- 首先实现AppDelegate里的代理方法:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
- 主Window必须要有一个TabBarController或者NavigationControllr,同样重写VC的两个属性。
- 此时控制整个APP选择方向的代码放到Appdelegate中进行统一管理
注意点:
- 如果MainWindow仅支持竖屏,但是AnotherWindow支持横屏模式的话。如果你从AotherWindow横屏的时候返回仅支持竖屏的MainWindow。记得强制旋转屏幕,不然:
你的MainWindow也会变得横屏一下。 - 还有MainWindow一定要用TabBarController,不然限制不了MainWindow始终保持竖屏。会出现UIStatusBar旋转,但是界面不旋转的Bug。
- 还有一点是:控制旋转的主要功能代码是在Appdelegate中根据Window的隐藏去判断旋转方向。
Demo
一个小demo,欢迎大家提出问题改正: github.com/WadeZhao23/…