首先获取设备型号 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适配不同机型也可以