苹果的屏幕旋转,iOS13以下版本和iOS14以上版本会有版本差异,现在对不同情况进行区分。这些方案兼顾了用户强制开启横屏。
方案的整体更改设置:设备的旋转方向都勾选上
情况一、整体竖屏,小部分横屏 并且rootView是navigationController
这样相当于没有tabbar,rootView只是navigationController。
我们创建一个项目的baseNavigationController
1、baseNavigationController的配置
#import "LXKBaseNavController.h"
@implementation LXKBaseNavController.h
- (void)viewDidLoad {
[super viewDidLoad];
}
///设置默认只支持竖屏
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
@end
这样我们的页面都是竖屏显示,那么当部分页面需要横屏展示怎么办?
其实很简单,我们只需要在横屏页面重写支持方向的方法即可
2、需要旋转的VC的配置
#import "LXKRootViewController.h"
@implementation LXKRootViewController.h
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark - Orientation
///屏幕是否支持自动旋转,yes
- (BOOL)shouldAutorotate {
return YES;
}
///页面选择默认方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeRight;
}
//页面支持的旋转方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
这样,我们的页面就可以正常旋转啦
情况二、整体竖屏,小部分横屏 并且rootView是TabbarViewController,tabbar下是NavigationController。
我们大部分app应该都是这种结构,其实原理和情况一差不多。
首先,在我们创建的tabbar中写入下面的方法
其次,再在navigationController中写入方案一的方法。注意,tabbar的navi一定要用方案一中定义方法了的navi
1、Tabbar的设置:
import UIKit
class LXKTabBarViewController: UITabBarController ,UITabBarControllerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
// self.setChildVC()
// self.delegate = self
// self.setTabbarPro()
}
//是否自动旋转:需要横屏的视图控制器中覆写此方法,返回YES
override var shouldAutorotate: Bool {
return true
}
//支持哪些屏幕方向:只支持竖屏
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}
//默认方向:只支持正常竖屏
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
}
override var prefersStatusBarHidden: Bool {
return false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .default
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
}
tabbar就配置好了。
接下来就是配置NavigationController,和方案一中的配置一样:
2、navigationController的配置
#import "LXKBaseNavController.h"
@implementation LXKBaseNavController.h
- (void)viewDidLoad {
[super viewDidLoad];
}
///设置默认只支持竖屏
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
@end
3、需要旋转的VC的配置
#import "LXKRootViewController.h"
@implementation LXKRootViewController.h
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark - Orientation
///屏幕是否支持自动旋转,yes
- (BOOL)shouldAutorotate {
return YES;
}
///页面选择默认方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeRight;
}
//页面支持的旋转方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
到这来就结束啦,其实梳理完旋转关系,还是很简单的。