简介:根据开发工具Xcode10,
硬件:苹果放弃4s/5/5c,从se,5s及以上的手机适配
软件:支持iOS8.0及以上系统适配。
iPhoneX系列设备对比
名称 | 屏幕分辨率 | 代码获取屏幕大小 | 使用几倍图 |
---|---|---|---|
iPhone X | 1125×2436 | {375, 812} | @3x |
iPhone XR | 828x1792 | {414, 896} | @2x |
iPhone XS | 1125×2436 | {375, 812} | @3x |
iPhone XS Max | 1242x2688 | {414, 896} | @3x |
由上可知:
iPhone X和iPhone XS屏幕大小是一样的,与iPhone 4.7寸屏系列,屏幕宽度一致,只是高度不一样。
iPhone XR和iPhone XS Max屏幕大小是一样的,与iPhone5.5寸屏系列,屏幕宽度一致,只是高度不一样。
并且目前所有的刘海屏的上下安全距离大小是一样的状态栏高度为44,底部高度为34。
根据这些体征,我们完全可以把对iPhone X的屏幕适配修,改为对所有的刘海屏的屏幕适配。利用其高度的特殊性。
修改代码如下方法一:
方法一: 根据高度适配宏定义
注: 简单的UI适配可以这么判断
//屏幕宽高
#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kScreenH [UIScreen mainScreen].bounds.size.height
// 刘海屏 宏定义
#define iPhoneX ((kScreenH == 812.f || kScreenH == 896.f) ? YES : NO)
// 适配刘海屏状态栏高度
#define SK_StatusBarHeight (iPhoneX ? 44.f : 20.f)
// 适配iPhone X 导航栏高度
#define SK_NavHeight (iPhoneX ? 88.f : 64.f)
// 适配iPhone X Tabbar距离底部的距离
#define SK_TabbarSafeBottomMargin (iPhoneX ? 34.f : 0.f)
// 适配iPhone X Tabbar高度
#define SK_TabbarHeight (iPhoneX ? (49.f+34.f) : 49.f)
方法二: 根据size适配宏定义
注:如果是分机型设置字号和布局的话, 可以使用此宏定义
- iPhone系列判断宏定义
//判断是否是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)
//判断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)
- navBar和tabBar的判断
//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)
网友评论