iOS如何判断是否是iPhone X,iPhone XS Max,iPhone XR 设备

最近发现一个项目的一个适配问题,当时是简单的适配了一下iPhone X,导致的结果就是当前的app在iPhone XR的情况下界面异常。

最初的判断逻辑:

#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

仅仅采取mode的size大小来判断。

结果iPhone XR 是:


iPhone X 各个屏幕比例

很明显上述最初的逻辑只考虑了iPhone X ,未考虑到其他机型。

如果后续再出新的设备,是否判断方法一直有问题。所以今天研究出新方法已被一劳永逸:

方法一:采取新的系统方法 safeAreaInsets;

var iPhoneX : Bool {if#available(iOS 11, *) {iflet w =UIApplication.shared.delegate?.window, let window = w, window.safeAreaInsets.left >0|| window.safeAreaInsets.bottom >0{returntrue} }returnfalse}

// 方法二   刘海屏的设计模式

let iPhoneX =UIApplication.shared.statusBarFrame.height >=44


总结:iPhone x 系列产品,其实应该来自于根因,新的界面必带来的新的方法。上述是否话可以新增一个是否满足faceID,是否也可以作为新的判断。上述方法,供大家参考。

你可能感兴趣的:(iOS如何判断是否是iPhone X,iPhone XS Max,iPhone XR 设备)