最近在模拟器上适配iPhone14Pro和iPhone14ProMax,Xcode13和Xcode14编译出来的数据表现不一致,记录一下其中的数据,待真机发布后需要验证更新。 更新:iPhone14ProMax真机数据与模拟器表现一致
设备 | 屏幕尺寸 | 屏幕分辨率 | 安全区域(上,右,下,左) | 状态栏(statusBarFrame) | 导航栏(navigationBar.frame) |
---|---|---|---|---|---|
iPhone14 | {390, 844} | {1170, 2532} | {47, 0, 34, 0} | {{0, 0}, {390, 47}} | {{0, 47}, {390, 44}} |
iPhone14 Plus | {428, 926} | {1284, 2778} | {47, 0, 34, 0} | {{0, 0}, {428, 47}} | {{0, 47}, {428, 44}} |
iPhone14 Pro | Xcode13.4: {390, 844} Xcode14: {393, 852} | Xcode13.4: {1170, 2532} Xcode14: {1179, 2556} | Xcode13.4: {59, 0, 34, 0} Xcode14: {59, 0, 34, 0} | Xcode13.4: {{0, 0}, {390, 44}} Xcode14: {{0, 0}, {393, 54}} | Xcode13.4: {{0, 59}, {390, 44}} Xcode14: {{0, 53.666666666666657}, {393, 44}} |
iPhone14 Pro Max | Xcode13.4: {428, 926} Xcode14: {430, 932} | Xcode13.4: {1284, 2778} Xcode14: {1290, 2796} | Xcode13.4: {59, 0, 34, 0} Xcode14: {59, 0, 34, 0} | Xcode13.4: {{0, 0}, {428,44}} Xcode14: {{0, 0}, {430, 54}} | Xcode13.4: {{0, 59}, {428, 44}} Xcode14: {{0, 53.666666666666657}, {430, 44}} |
其中iPhone14Pro及ProMax的导航栏top值在Xcode14编译出来是53.67,需要注意NavigationBar.bottom与状态栏+导航栏算出来的值不一致。
为了兼容Xcode13 14差异,调整一下获取状态栏高度的方法:
+ (CGFloat)statusBarHeight {
if ( @available(iOS 13.0, *)) {
NSSet *set = [UIApplication sharedApplication].connectedScenes;
UIWindowScene *windowScene = [set anyObject];
UIStatusBarManager *statusBarManager = windowScene.statusBarManager;
CGFloat statusBarHeight = statusBarManager.statusBarFrame.size.height;
if( @available(iOS 16.0, *)) {
//Xcode13编译的包,在iPhone14Pro及Max取到的状态栏高度是44,实际是59,需要做调整(模拟器数据)
BOOL needAdjust = (statusBarHeight == 44);
if(windowScene.windows.firstObject.safeAreaInsets.top == 59 && needAdjust) {
statusBarHeight = 59;
}
}
return statusBarHeight;
}
CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
CGFloat safeAreaTop = UIApplication.sharedApplication.windows.firstObject.safeAreaInsets.top;
return MAX(statusBarHeight, safeAreaTop);
}