iOS 16 版本系统在 UIKit 上有了一些更改,例如横竖屏旋转的方法不会向前兼容。
涂鸦 IPC 业务包已经兼容了 iOS 16 版本的横竖屏特性。如果您在升级涂鸦 IPC 业务包后,在切换横屏时仍然会显示错乱,有可能是您在 App 适配 iOS 16 时,和 IPC 业务包的适配方案不兼容。建议您的 App 按照以下流程适配适配 iOS 16 横屏:
场景一:除了涂鸦 IPC 业务包的页面外,您的 App 只有竖屏样式。此时,建议您按照下面流程进行适配:
1、为 AppDelegate.m
类新增以下方法,用来确保 App 支持所有旋转方向:
Code: Select all
- (UIInterfaceOrientationMask)application:(UIApplication *)application
supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return UIInterfaceOrientationMaskAll;
}
2、新增 UIViewController
Category 类别,UIViewController+Category
并新增以下方法,用来确保所有页面兼容竖屏情况:
Code: Select all
-(BOOL)shouldAutorotate {
return NO;
}
-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
3、新增 UINavigationController Category 类别,UINavigationController+Category 并添加下面方法,用来确保您的 App 能够正确兼容 IPC 业务包关于 iOS16 横竖的适配:
Code: Select all
-(BOOL)shouldAutorotate {
return [self.topViewController shouldAutorotate];
}
-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
场景二:除了涂鸦 IPC 业务包的页面外,您的 App 也横屏的业务。此时,建议您按照下面流程进行适配:
1、同场景一的第一步
2、新增 UINavigationController Category 类别,UINavigationController+Category 并添加下面方法,用来确保您的 App 能够正确兼容 IPC 业务包关于 iOS16 横竖的适配:
Code: Select all
-(BOOL)shouldAutorotate {
return [self.topViewController shouldAutorotate];
}
-(UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
3、在您业务中,只支持竖屏的页面添加以下方法,如果您有统一的 BaseViewController,则在基类中添加以下方法即可:
Code: Select all
- (BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
4、在支持横屏业务的页面,新增以下内容:
新增 UIViewController 的私有类别 UIViewController+privete,并声明 - (void)thing_rotateWindowIfNeed; 方法。:只需要声明,不需要实现,iOS业务包内有实现该方法
Code: Select all
@interface UIViewController (private)
- (void)thing_rotateWindowIfNeed;
@end
5、在您支持横屏业务的页面控制器 A 中,新增全局变量:
Code: Select all
@property (nonatomic, assign) BOOL fullScreen;
6、并在 A 类中新增以下方法:
Code: Select all
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
if (self.fullScreen) {
return UIInterfaceOrientationMaskLandscapeRight;
}
return UIInterfaceOrientationMaskPortrait;
}
7、进入 A 页面时,您可能有两种业务场景:
场景a,进入 A 页面时就横屏展示。此时,在页面控制器 A 的 -(void)viewDidload; 方法中,将变量 fullScreen 置为 YES,并调用 [self thing_rotateWindowIfNeed]; 即可。
场景b,A 页面有个按钮,单击按钮后横屏展示。此时,您需要在在按钮的响应方法加入以下代码:
Code: Select all
- (void)fullScreenAction {
self.fullScreen = !self.fullScreen;
[self thing_rotateWindowIfNeed];
}