目录

iPhone 刘海机型UI适配(X、Xs、Xs Max、Xr)

目录

iPhoneX 的分辨率:2436 x 1125px,812 x 375pt

iPhoneXs 的分辨率: 2436 x 1125px,pt: 812 x 375pt

iPhoneXs Max 的分辨率:2688 x 1242px,pt: 896 x 414pt

iPhoneXr 的分辨率:1792 x 828px,pt: 896 x 414pt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
//判断是否是ipad
#define isPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
//判断iPhone4系列
#define kiPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPhone5系列
#define kiPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPhone6系列
#define kiPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iphone6+系列
#define kiPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPhoneX
#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPhoneXs
#define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPhoneXs Max
#define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
//判断iPHoneXr
#define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

// 判断是否是刘海机型
#define IS_IPHONE_X_S_Max_R (IS_IPHONE_X || IS_IPHONE_Xs || IS_IPHONE_Xs_Max || IS_IPHONE_Xr)

NavigationBar 和 TabBar 的判断

1
2
3
4
//刘海机型
#define StatusBar_Height (IS_IPHONE_X_S_Max_R ? 44.0 : 20.0)
#define NavBar_Height (IS_IPHONE_X_S_Max_R ? 88.0 : 64.0)
#define TabBar_Height (IS_IPHONE_X_S_Max_R ? 83.0 : 49.0)

其实刘海屏的主要影响是屏幕顶部多出来的一块刘海,所以其实可以获取状态栏的高度,来确定导航栏需要增加的高度或者是位置(这个就要看具体的业务需求了),不过这个有一点问题就是如果状态栏被隐藏的话,高度就会为 0,如果在状态栏隐藏状态下判断,拿到的高度显然是不符合期望值的,不过这个情况也是比较少见的情况,如果注意页面之间的代码逻辑的话,是可以避免的。

1
[UIApplication sharedApplication].statusBarFrame.size.height