如何在iOS中检查iPhone设备版本?

嗨,我想在iOS中检查iPhone设备版本。

我的意思是,目前运行的设备是iPhone 4或iPhone 5。

我需要检查设备,是iPhone 5还是不是?

因为我的应用程序需要知道iPhone 5的问题。

那我该怎么办?

添加以下代码:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){ if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) { CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); if(result.height == 960) { NSLog(@"iPhone 4 Resolution"); resolution_number = 1; } if(result.height == 1136) { NSLog(@"iPhone 5 Resolution"); } } else{ NSLog(@"Standard Resolution"); } } 

将这个macros添加到你的代码中:

 #define HEIGHT_IPHONE_5 568 #define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) #define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 ) 

那么只要你需要检查

 if (IS_IPHONE_5) { //Code for iPhone5 }else{ //Code for earlier version } 

基于这个问题的答案,你可以确定你正在使用的模型:

 NSString *deviceModel = [UIDevice currentDevice].model; 

结果可以是其中的一个值:iPod touch,iPhone,iPad,iPhone模拟器,iPad模拟器

对于特定的模型,您正在使用的版本可以通过在UIDevice.h类上创build一个类来确定:

的UIDevice + Utilities.h

 #import <UIKit/UIKit.h> @interface UIDevice (Utilities) - (CGFloat)deviceModelVersion; @end 

的UIDevice + Utilities.m

 #import "UIDevice+Utilities.h" #include <sys/types.h> #include <sys/sysctl.h> @implementation UIDevice (Utilities) - (CGFloat)deviceModelVersion { size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithUTF8String:machine]; free(machine); if ([platform rangeOfString:@"iPhone"].location != NSNotFound) { return [[[platform stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue]; } else if ([platform rangeOfString:@"iPad"].location != NSNotFound) { return [[[platform stringByReplacingOccurrencesOfString:@"iPad" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue]; } else if ([platform rangeOfString:@"iPod"].location != NSNotFound) { return [[[platform stringByReplacingOccurrencesOfString:@"iPod" withString:@""] stringByReplacingOccurrencesOfString:@"," withString:@"."] floatValue]; } else if ([platform rangeOfString:@"i386"].location != NSNotFound || [platform rangeOfString:@"x86_64"].location != NSNotFound) { return -1.0; //Currently it is not possible (or maybe it is, but I do not know) //which type of simulator device model version your app is running //so I am returning -1.0 device model version for all simulators types } return 0.0; } @end 

示例如何调用函数deviceModelVersion

 CGFloat deviceModelVersion = [UIDevice currentDevice].deviceModelVersion; 

可能的结果可以是1.0,1.1,…,2.0,2.1,…,3.0,3.1,…,4.0,4.1,…,5.0,5.1,…

要确定是否是iPhone 5,你会有

 deviceModel : "iPhone" 

 deviceModelVersion : >=5.0 and < 6.0 

我实际上find了一个#define这个技巧

 #define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double) 568) < DBL_EPSILON) 
 #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f) #define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f) #define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0f) #define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f) #define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0f) #define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)