iOS 获取设备型号(最新机型11、11 Pro、11 Pro MAX等)和App版本号等信息 以及获取是否是刘海屏

首先获取设备型号 APP版本的操作   下面便是获取手机的型号

     // 获取当前App的基本信息字典
    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
    //app名称
    NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
    // app版本
    NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
    // app build版本
    NSString *app_build = [infoDictionary objectForKey:@"CFBundleVersion"];
    //手机别名: 用户定义的名称
    NSString* userPhoneName = [[UIDevice currentDevice] name];
    //设备名称
    NSString* deviceName = [[UIDevice currentDevice] systemName];
    //手机系统版本
    NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
    //手机型号
    NSString* phoneModel = [[UIDevice currentDevice] model];
    //地方型号  (国际化区域名称)
    NSString* localPhoneModel = [[UIDevice currentDevice] localizedModel];

转发一下获取所有机型的代码,从下面开始的方法,都要引用下面这个库(iOS 13 系统更新已经更新很久了,特意填一下获取iPhone 11、iPhone 11 Pro Max、iPhone 11 Pro 的机型)

//需要导入头文件:#import

+ (NSString *)getCurrentDeviceModel{
    struct utsname systemInfo;
    uname(&systemInfo);
    
    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
    if([platform isEqualToString:@"iPhone1,1"]) return@"iPhone 2G";
    if([platform isEqualToString:@"iPhone1,2"]) return@"iPhone 3G";
    if([platform isEqualToString:@"iPhone2,1"]) return@"iPhone 3GS";
    if([platform isEqualToString:@"iPhone3,1"]) return@"iPhone 4";
    if([platform isEqualToString:@"iPhone3,2"]) return@"iPhone 4";
    if([platform isEqualToString:@"iPhone3,3"]) return@"iPhone 4";
    if([platform isEqualToString:@"iPhone4,1"]) return@"iPhone 4S";
    if([platform isEqualToString:@"iPhone5,1"]) return@"iPhone 5";
    if([platform isEqualToString:@"iPhone5,2"]) return@"iPhone 5";
    if([platform isEqualToString:@"iPhone5,3"]) return@"iPhone 5c";
    if([platform isEqualToString:@"iPhone5,4"]) return@"iPhone 5c";
    if([platform isEqualToString:@"iPhone6,1"]) return@"iPhone 5s";
    if([platform isEqualToString:@"iPhone6,2"]) return@"iPhone 5s";
    if([platform isEqualToString:@"iPhone7,1"]) return@"iPhone 6 Plus";
    if([platform isEqualToString:@"iPhone7,2"]) return@"iPhone 6";
    if([platform isEqualToString:@"iPhone8,1"]) return@"iPhone 6s";
    if([platform isEqualToString:@"iPhone8,2"]) return@"iPhone 6s Plus";
    if([platform isEqualToString:@"iPhone8,4"]) return@"iPhone SE";
    if([platform isEqualToString:@"iPhone9,1"]) return@"iPhone 7";
    if([platform isEqualToString:@"iPhone9,2"]) return@"iPhone 7 Plus";
    if([platform isEqualToString:@"iPhone10,1"])return@"iPhone 8";
    if([platform isEqualToString:@"iPhone10,4"])return@"iPhone 8";
    if([platform isEqualToString:@"iPhone10,2"])return@"iPhone 8 Plus";
    if([platform isEqualToString:@"iPhone10,5"])return@"iPhone 8 Plus";
    if([platform isEqualToString:@"iPhone10,3"])return@"iPhone X";
    if([platform isEqualToString:@"iPhone10,6"])return@"iPhone X";
    //新添加
    if([platform isEqualToString:@"iPhone11,8"])return@"iPhone XR";
    if([platform isEqualToString:@"iPhone11,2"])return@"iPhone XS";
    if([platform isEqualToString:@"iPhone11,4"])return@"iPhone XS Max";
    if([platform isEqualToString:@"iPhone11,6"])return@"iPhone XS Max";
    if([platform isEqualToString:@"iPhone12,1"])return@"iPhone 11";
    if([platform isEqualToString:@"iPhone12,3"])return@"iPhone 11 Pro";
    if([platform isEqualToString:@"iPhone12,5"])return@"iPhone 11 Pro Max";
    if([platform isEqualToString:@"iPhone12,8"])return@"iPhone SE 2020";
    //结束
    if([platform isEqualToString:@"iPod1,1"]) return@"iPod Touch 1G";
    if([platform isEqualToString:@"iPod2,1"]) return@"iPod Touch 2G";
    if([platform isEqualToString:@"iPod3,1"]) return@"iPod Touch 3G";
    if([platform isEqualToString:@"iPod4,1"]) return@"iPod Touch 4G";
    if([platform isEqualToString:@"iPod5,1"]) return@"iPod Touch 5G";
    if([platform isEqualToString:@"iPad1,1"]) return@"iPad 1G";
    if([platform isEqualToString:@"iPad2,1"]) return@"iPad 2";
    if([platform isEqualToString:@"iPad2,2"]) return@"iPad 2";
    if([platform isEqualToString:@"iPad2,3"]) return@"iPad 2";
    if([platform isEqualToString:@"iPad2,4"]) return@"iPad 2";
    if([platform isEqualToString:@"iPad2,5"]) return@"iPad Mini 1G";
    if([platform isEqualToString:@"iPad2,6"]) return@"iPad Mini 1G";
    if([platform isEqualToString:@"iPad2,7"]) return@"iPad Mini 1G";
    if([platform isEqualToString:@"iPad3,1"]) return@"iPad 3";
    if([platform isEqualToString:@"iPad3,2"]) return@"iPad 3";
    if([platform isEqualToString:@"iPad3,3"]) return@"iPad 3";
    if([platform isEqualToString:@"iPad3,4"]) return@"iPad 4";
    if([platform isEqualToString:@"iPad3,5"]) return@"iPad 4";
    if([platform isEqualToString:@"iPad3,6"]) return@"iPad 4";
    if([platform isEqualToString:@"iPad4,1"]) return@"iPad Air";
    if([platform isEqualToString:@"iPad4,2"]) return@"iPad Air";
    if([platform isEqualToString:@"iPad4,3"]) return@"iPad Air";
    if([platform isEqualToString:@"iPad4,4"]) return@"iPad Mini 2G";
    if([platform isEqualToString:@"iPad4,5"]) return@"iPad Mini 2G";
    if([platform isEqualToString:@"iPad4,6"]) return@"iPad Mini 2G";
    if([platform isEqualToString:@"iPad4,7"]) return@"iPad Mini 3";
    if([platform isEqualToString:@"iPad4,8"]) return@"iPad Mini 3";
    if([platform isEqualToString:@"iPad4,9"]) return@"iPad Mini 3";
    if([platform isEqualToString:@"iPad5,1"]) return@"iPad Mini 4";
    if([platform isEqualToString:@"iPad5,2"]) return@"iPad Mini 4";
    if([platform isEqualToString:@"iPad5,3"]) return@"iPad Air 2";
    if([platform isEqualToString:@"iPad5,4"]) return@"iPad Air 2";
    if([platform isEqualToString:@"iPad6,3"]) return@"iPad Pro 9.7";
    if([platform isEqualToString:@"iPad6,4"]) return@"iPad Pro 9.7";
    if([platform isEqualToString:@"iPad6,7"]) return@"iPad Pro 12.9";
    if([platform isEqualToString:@"iPad6,8"]) return@"iPad Pro 12.9";
    if([platform isEqualToString:@"i386"]) return@"iPhone Simulator";
    if([platform isEqualToString:@"x86_64"]) return@"iPhone Simulator";
    return deviceModel;
}

swift版本

func iphoneType() ->String {
        var systemInfo =utsname()
        uname(&systemInfo)
        let platform = withUnsafePointer(to: &systemInfo.machine.0) { ptr in
            return String(cString: ptr)
        }
        if platform =="iPhone1,1" {return"iPhone 2G"}
        if platform =="iPhone1,2" {return"iPhone 3G"}
        if platform =="iPhone2,1" {return"iPhone 3GS"}
        if platform =="iPhone3,1" {return"iPhone 4"}
        if platform =="iPhone3,2" {return"iPhone 4"}
        if platform =="iPhone3,3" {return"iPhone 4"}
        if platform =="iPhone4,1" {return"iPhone 4S"}
        if platform =="iPhone5,1" {return"iPhone 5"}
        if platform =="iPhone5,2" {return"iPhone 5"}
        if platform =="iPhone5,3" {return"iPhone 5C"}
        if platform =="iPhone5,4" {return"iPhone 5C"}
        if platform =="iPhone6,1" {return"iPhone 5S"}
        if platform =="iPhone6,2" {return"iPhone 5S"}
        if platform =="iPhone7,1" {return"iPhone 6 Plus"}
        if platform =="iPhone7,2" {return"iPhone 6"}
        if platform =="iPhone8,1" {return"iPhone 6S"}
        if platform =="iPhone8,2" {return"iPhone 6S Plus"}
        if platform =="iPhone8,4" {return"iPhone SE"}
        if platform =="iPhone9,1" {return"iPhone 7"}
        if platform =="iPhone9,2" {return"iPhone 7 Plus"}
        if platform =="iPhone10,1" {return"iPhone 8"}
        if platform =="iPhone10,2" {return"iPhone 8 Plus"}
        if platform =="iPhone10,3" {return"iPhone X"}
        if platform =="iPhone10,4" {return"iPhone 8"}
        if platform =="iPhone10,5" {return"iPhone 8 Plus"}
        if platform =="iPhone10,6" {return"iPhone X"}
        //新添加
        if platform =="iPhone11,8" {return "iPhone XR"}
        if platform =="iPhone11,2" {return "iPhone XS"}
        if platform =="iPhone11,4" {return "iPhone XS Max"}
        if platform =="iPhone11,6" {return "iPhone XS Max"}
        if platform =="iPhone12,1" {return "iPhone 11"}
        if platform =="iPhone12,3" {return "iPhone 11 Pro"}
        if platform =="iPhone12,5" {return "iPhone 11 Pro Max"}
        if platform =="iPhone12,8" {return "iPhone SE 2020"}
        //结束
        if platform =="iPod1,1" {return"iPod Touch 1G"}
        if platform =="iPod2,1" {return"iPod Touch 2G"}
        if platform =="iPod3,1" {return"iPod Touch 3G"}
        if platform =="iPod4,1" {return"iPod Touch 4G"}
        if platform =="iPod5,1" {return"iPod Touch 5G"}
        if platform =="iPad1,1" {return"iPad 1"}
        if platform =="iPad2,1" {return"iPad 2"}
        if platform =="iPad2,2" {return"iPad 2"}
        if platform =="iPad2,3" {return"iPad 2"}
        if platform =="iPad2,4" {return"iPad 2"}
        if platform =="iPad2,5" {return"iPad Mini 1"}
        if platform =="iPad2,6" {return"iPad Mini 1"}
        if platform =="iPad2,7" {return"iPad Mini 1"}
        if platform =="iPad3,1" {return"iPad 3"}
        if platform =="iPad3,2" {return"iPad 3"
        if platform =="iPad3,3" {return"iPad 3"}
        if platform =="iPad3,4" {return"iPad 4"}
        if platform =="iPad3,5" {return"iPad 4"}
        if platform =="iPad3,6" {return"iPad 4"}
        if platform =="iPad4,1" {return"iPad Air"}
        if platform =="iPad4,2" {return"iPad Air"}
        if platform =="iPad4,3" {return"iPad Air"}
        if platform =="iPad4,4" {return"iPad Mini 2"}
        if platform =="iPad4,5" {return"iPad Mini 2"}
        if platform =="iPad4,6" {return"iPad Mini 2"}
        if platform =="iPad4,7" {return"iPad Mini 3"}
        if platform =="iPad4,8" {return"iPad Mini 3"}
        if platform =="iPad4,9" {return"iPad Mini 3"}
        if platform =="iPad5,1" {return"iPad Mini 4"}
        if platform =="iPad5,2" {return"iPad Mini 4"}
        if platform =="iPad5,3" {return"iPad Air 2"}
        if platform =="iPad5,4" {return"iPad Air 2"}
        if platform =="iPad6,3" {return"iPad Pro 9.7"}
        if platform =="iPad6,4" {return"iPad Pro 9.7"}
        if platform =="iPad6,7" {return"iPad Pro 12.9"}
        if platform =="iPad6,8" {return"iPad Pro 12.9"}
        if platform =="i386"   {return"iPhone Simulator"}
        if platform =="x86_64" {return"iPhone Simulator"}
        return platform
}

接下来给大家附上一个查看所有苹果产品型号的网址,如果出了最新的iPhone新机型,例如iPhone12等,这个网站会第一时间更新,大家在开发过程中就可以获取手机型号

查看网址:https://www.theiphonewiki.com/wiki/Models

下面是获取iPhone手机是否刘海儿屏,方法和上面类似

 判断手机是否是异形屏幕

 iOS 10 以下 的系统肯定不是刘海儿屏,所以直接iOS10 及以下返回NO,iOS 11 和iOS 12 存在的手机型号很多,这里只要获取手机是不是iPhone X 、iPhone XS、iPhone XS Max、iPhone XR 这几部手机就可以了,剩下的直接返回NO ,这样返回是YES就是曲面屏


/**
 判断手机是否是异形屏幕
 
 @return YES 是 异形屏幕
 */
+ (BOOL)iphoneIsProfiledScreen {
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
    if([platform isEqualToString:@"iPhone10,3"] || [platform isEqualToString:@"iPhone10,6"]  || [platform isEqualToString:@"iPhone11,8"] || [platform isEqualToString:@"iPhone11,2"] || [platform isEqualToString:@"iPhone11,6"] || [platform isEqualToString:@"iPhone11,4"] || [platform isEqualToString:@"iPhone12,1"] || [platform isEqualToString:@"iPhone12,3"] || [platform isEqualToString:@"iPhone12,5"] ) {
        return YES;
    } else {
        return NO;
    }
}

获取完是不是刘海屏,剩下的自然就是适配刘海屏,刘海屏幕的出现打破以往的适配形式,导航有原来的64变成了88,分栏控制器也发生了变化,所以我们当我知道是否是刘海屏,就知道对应的怎么适配

首先我们要创建三个最常用的宏定义,这两个宏定义分别是自动适配导航的高度,和分栏控制器的距离底部的高度

 

1、#define SafeAreaTopHeight    ([NSObject iphoneIsProfiledScreen]  ?  88 : 64)

刘海屏幕返回88,反之返回64,当然这个高度可以更改,看APP需要

2、#define SafeAreaBottomHeight ([NSObject iphoneIsProfiledScreen] ? 34 : 0)

原来距离底部距离为0 的按钮或者其他控件,如果是刘海屏都要向上移动34,为了刘海屏手机底部滑动条的区域留出 ,但是还是看APP需要

3 、#define SafeAreaStatusHeight ([NSObject iphoneIsProfiledScreen] ? 44 : 20)

这个是状态栏的高度,这个用的和上面两个用的就很少了

这样就可以用代码适配所有手机型号了,但是用XIB或者storyboard适配不同机型也可以

 

你可能感兴趣的:(iOS,OC,Swift,ios)