在适配iPhone X时,发现iPhone X的屏幕上下没有铺满。新建的项目,都是铺满屏幕的。
因为启动页用的是Launch Image Source,而用不到Launch Screen File 所以把LaunchScreen.storyboard 给删除了,Info.plist 里面也就没有了 Launch screen interface file base name 。
解决方法是,在Info.plist 里面增加 Launch screen interface file base name 就可以了。
注意:只是增加一个 key。Launch screen interface file base name
如果增加了key,还是不行的话,添加一张iPhone X屏幕分辨率的启动图也能达到一样的效果。
增加完的效果是,我们要注意的是,在iPhone X 里面,状态栏是不能隐藏的。如果隐藏了,会挡住界面,需要自己再去做适配。
下面是适配iPhone X用到的宏
// UIScreen width.
#define MM_ScreenWidth [UIScreen mainScreen].bounds.size.width
// UIScreen height.
#define MM_ScreenHeight [UIScreen mainScreen].bounds.size.height
// iPhone X
#define MM_iPhoneX (LL_ScreenWidth == 375.f && LL_ScreenHeight == 812.f ? YES : NO)
// Status bar height.
#define MM_StatusBarHeight (LL_iPhoneX ? 44.f : 20.f)
// Navigation bar height.
#define MM_NavigationBarHeight 44.f
// Tabbar height.
#define MM_TabbarHeight (LL_iPhoneX ? (49.f+34.f) : 49.f)
// Tabbar safe bottom margin.
#define MML_TabbarSafeBottomMargin (LL_iPhoneX ? 34.f : 0.f)
// Status bar & navigation bar height.
#define MM_StatusBarAndNavigationBarHeight (LL_iPhoneX ? 88.f : 64.f)
#define MM_ViewSafeAreInsets(view) ({UIEdgeInsets insets; if(@available(iOS 11.0, *)) {insets = view.safeAreaInsets;} else {insets = UIEdgeInsetsZero;} insets;})