iOS横竖屏旋转内容总结

2020-01-21 04:41:39刘景俊

iOS,横竖屏旋转

这种情况的APP可以说是非常少了,不过还是对后面的情况有所帮助。

设置BaseVC,在其中的配置锁定竖屏:


class BaseVC: UIViewController {
 override var shouldAutorotate: Bool {
  return false
 }  
 override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  return .portrait
 }
 override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
  return .portrait
 }  
 override func viewDidLoad() {
  super.viewDidLoad()
 } 
}

然后其余控制器继承BaseVC,需要旋转的控制器单独再次重写方法。

3.2.2 根控制器为UINavigationController

对应Demo配置:

iOS,横竖屏旋转

我们可以获取到当前显示层级的控制器,并拿出它的属性赋给UINavigationController


class BaseNavC: UINavigationController {
 override var shouldAutorotate: Bool {
  return self.viewControllers.last?.shouldAutorotate ?? false
 }
 override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  return self.viewControllers.last?.supportedInterfaceOrientations ?? .portrait
 }
 override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
  return self.viewControllers.last?.preferredInterfaceOrientationForPresentation ?? .portrait
 }
 override func viewDidLoad() {
  super.viewDidLoad()
 }
}

3.2.3 根控制器为UITabBarController

对应Demo配置:

iOS,横竖屏旋转


class BaseTabBarC: UITabBarController {
 override var shouldAutorotate: Bool {
  return self.selectedViewController?.shouldAutorotate ?? false
 }
  
 override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
  return self.selectedViewController?.supportedInterfaceOrientations ?? .portrait
 }
  
 override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
  return self.selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
 }
  
 override func viewDidLoad() {
  super.viewDidLoad()
 }
}

同理,我们只需要获取当前选中的控制器的配置赋给UITabBarController,这样一层一层就配置好了!

3.3 最简单的实现方式

对应Demo配置:

iOS,横竖屏旋转

在查询屏幕旋转相关资料的时候我发现屏幕旋转时会最后调用Appdelegate中的: