先前输出 Framework 的记录文章里面漏了一点,就是 UI 在各设备/方向上的适应性。测试 demo 一直勾选 Requires full screen 的选项,导致一直未能发现在 iPad 上存在分屏/旋转的异常情况。
SDK 接手过来就是限定要在竖屏页面使用的,毕竟人脸识别的 UI 还是竖屏比较自然。所以在很多页面上关闭了自动旋转并指定了支持的方向:
- (BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
然而这在 App 支持在 iPad 上分屏的情况下没有任何限制能力。
接入方的 AppDelegate 如果返回只 support landscape,上面的代码也有麻烦:
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return UIInterfaceOrientationMaskLandscape;
}
这种情况下,UIAlertController
的 -shouldAutorotate
返回 YES,会出现由于两个支持的方向没有交集而崩溃。这种情况最好能让接入方兼容一下,读取 SDK 的标记,返回 SDK 需要的方向。而这次显然不行,因为接入方说这个是引擎的代码,游戏接入升级引擎的成本较大。只能自己去 hook 宿主的 application:supportedInterfaceOrientationsForWindow:
方法。
🚩准备整理一个 UI 编写指南。
— Aug 26, 2021