iOS判断是否是有刘海头的iPhone X类设备

方式一、以statusbar的高度进行判断,如下:(有瑕疵)

#define isIPhoneXAll ([[UIApplication sharedApplication] statusBarFrame].size.height == 44)

问题1、在设置不展示状态栏时渠道的状态栏高度就是0,导致判断出错
问题2、这种写死的等于某个数字的判断有风险,在苹果后续某个系统版本如果修改了具体的值会导致线上的版本判断出错

隐藏状态栏的修改如下:

1.全局设置隐藏状态栏

修改info.plist文件的属性View controller-based status bar appearance

image

所有页面的statusBar高度都将变成0.

2.单独在某个controller设置隐藏
// 代码调用隐藏状态栏
[UIApplication sharedApplication].statusBarHidden = YES;

此页面的状态栏高度为0.

参考:

  • 判断是否是iPhoneX系列机型
  • StatusBar状态栏的隐藏实现
  • iOS隐藏StatusBar

方式二、判断safearea是否是UIEdgeInsetsZero,如果不是,则是刘海头手机

#define IPHONE_X \
({BOOL isPhoneX = NO;\
if (@available(iOS 11.0, *)) {\
isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
}\
(isPhoneX);})

参考:

  • iOS判断刘海屏幕机型

你可能感兴趣的:(iOS判断是否是有刘海头的iPhone X类设备)