引入iOS IPC业务包后,横竖屏如何兼容iOS 16 ?

App开发相关产品技术讨论,包括OEM App、App SDK等话题


Post Reply
大为啊
Posts: 1

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];
}

Tags:
Post Reply