iOS灵活适配刘海屏手机的顶部状态栏高度和底部安全距离

我们知道在刘海屏手机出来之前,iOS App的顶部状态栏高度为20pt,导航栏的可布局区域高度为44pt,整个导航栏高度为64pt,底部安全距离为0。
在刘海屏手机出来后,刘海屏机型iOS App的顶部状态栏高度为44pt,导航栏的可布局区域高度为44pt,整个导航栏高度为88pt,底部安全距离为34pt。
我们除了要考虑手机在正常状态下的适配以外,还要考虑通话、定位、录屏状态下时,因为顶部还会多出显示状态的区域导致界面变形。我们可以动态获取状态栏高度来进行适配甚至判断是否是刘海屏机型
swift:

//获取状态栏的高度,全面屏手机的状态栏高度为44pt,非全面屏手机的状态栏高度为20pt
//状态栏高度
let statusBarHeight = UIApplication.shared.statusBarFrame.height;
//导航栏高度
let navigationHeight = (statusBarHeight + 44)
//tabbar高度
let tabBarHeight = (statusBarHeight==44 ? 83 : 49)
//顶部的安全距离
let topSafeAreaHeight = (statusBarHeight - 20)
//底部的安全距离,全面屏手机为34pt,非全面屏手机为0pt
let bottomSafeAreaHeight = (tabBarHeight - 49)

OC同上原理

    double statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;

我之前在做适配时,是通过手机屏幕分辨率判断机型的方法来适配的,这里也贴出来参考下

//判断是否是ipad
#define isPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
//判断iPhoneX
#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[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)
//判断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)

//iPhoneX系列
#define Height_StatusBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 44.0 : 20.0)
#define Height_NavBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 88.0 : 64.0)
#define Height_TabBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 83.0 : 49.0)

你可能感兴趣的:(iOS)