iPhone X屏幕适配
2018-03-15 本文已影响35人
碧海云天V
前言
iPhone X出来后,屏幕顶部的齐刘海曾让许多人病垢,使用者看了会不爽,App开发者对这个齐刘海也深恶痛绝,还得重新做适配。不过,不得不承认iPhone X的全面屏是目前业界做的最好的,屏占比是最高的,再加上流畅简洁的iOS系统,让iPhone X的体验非常不错。
作为一个App开发者当然也要对现有的App做适配,下面就说一下我是怎么适配的。
-
首先看一下启动页
如果用LaunchScreen.storyboard,那么就在其view上面放一些相对布局的控件,启动的时候就可以充满iPhone X的整个屏幕了。

如果使用的是LaunchImage,那么需要添加一张尺寸为1125x2436的图片,否则在iPhone X上会出现上下两条黑边的现象。

-
没添加尺寸为1125x2436的图片前
image.png
-
添加尺寸为1125x2436的图片后
image.png
-
下面是iPhone X的安全区
iPhoneX竖屏下,顶部为了适应齐刘海,状态栏高度由以前的20px变为了44px,底部为了适应上滑的Home条,苹果建议预留高度为34px的空白区域。

iPhoneX横屏下,由于一边会有齐刘海的影响,左右分别设置边距为44px,同时底部为了适应上滑的Home条,设置距离为21px。

iPhoneX每一段的高度

-
适配时常用的宏
// 屏幕宽度
#define ScreenWidth [UIScreen mainScreen].bounds.size.width
// 屏幕高度
#define ScreenHeight [UIScreen mainScreen].bounds.size.height
// 判断是否为iPhone X
#define IsiPhoneX (ScreenWidth == 375.f && ScreenHeight == 812.f ? YES : NO)
#define Is_iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
// 状态栏高度
#define StatusHeighe [[UIApplication sharedApplication] statusBarFrame].size.height
//导航栏高度
#define NaviBarHeight self.navigationController.navigationBar.frame.size.height
//状态栏和导航栏的高度
#define NaviBarStatusBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height+self.navigationController.navigationBar.frame.size.height)
//底部菜单栏高度
#define TabBarHeight self.tabBarController.tabBar.frame.size.height
//安全区
#define ViewSafeAreInsets(view) ({UIEdgeInsets insets; if(@available(iOS 11.0, *)) {insets = view.safeAreaInsets;} else {insets = UIEdgeInsetsZero;} insets;})
注:竖屏时底部间距为:34,横屏时为:21