Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting iPhone 6/6+ screen sizes in point values

Tags:

ios

iphone

ios8

Given the newly announced iPhone 6 screen sizes:

iPhone 6: 1334h * 750w @2x (in points: 667h * 375w) iPhone 6+: 1920 * 1080 @3x (in points: 640h * 360w) 

I was wondering if there is code that allows me to detect which screen size the user's device is, so that I could adjust and size UIImages and other materials accordingly with the user's device.

So far, I have been using the following:

- (NSString *) platform{     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);     return platform; }  - (NSString *) platformString{     NSString *platform = [self platform];     if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";     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,3"])    return @"Verizon iPhone 4";     if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";     if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";     if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";     if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";     if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";     if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";     if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";     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";     if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";     if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";     if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";     if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";     if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";     if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";     if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";     if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";     if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";     if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";     if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";     if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";     if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";     if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";     if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";     if ([platform isEqualToString:@"iPad4,4"])      return @"iPad mini 2G (WiFi)";     if ([platform isEqualToString:@"iPad4,5"])      return @"iPad mini 2G (Cellular)";     if ([platform isEqualToString:@"i386"])         return @"Simulator";     if ([platform isEqualToString:@"x86_64"])       return @"Simulator";     return platform; } 

As such, should I assume iPhone7,1 and iPhone7,2 are the iPhone 6 while iPhone7,3 and iPhone7.4 are the pluses? If anyone has more concrete way to tell it'd be great, thanks.!

like image 801
daspianist Avatar asked Sep 10 '14 01:09

daspianist


People also ask

How do I tell the size of my iPhone screen?

Note: Screen size is measured diagonally from corner to corner.

What screen size does the iPhone 6 have?

The most significant changes to the iPhone 6 and iPhone 6 Plus are its displays; both branded as "Retina HD Display" and "ion-strengthened", the iPhone 6 display is 4.7 inches in size with a 16:9 resolution of 1334x750 (326 ppi, minus one row of pixels), while the iPhone 6 Plus includes a 5.5-inch 1920x1080 (1080p) ...

What aspect ratio is an iPhone 6S screen?

iPhone 6s has a medium-sized IPS LCD display with a 4.7-inch screen (60.9 cm2, 16:9 aspect ratio), and an approximate 65.6% screen-to-body ratio.

How many inches is an iPhone 6 from top to bottom?

The Apple iPhone 6S was officially discontinued on September 12, 2018. The Apple iPhone 6S has a height of 5.44” (138.3 mm), width of 2.64” (67.1 mm), depth of . 28” (7.1 mm), and weighs 5 oz (143 g). The Apple iPhone 6S was released in 2014.


2 Answers

The first screen will be the device screen, Note that a launch images for the new phones have to be added before, otherwise the app is running in Zoomed Mode for older apps : Here is the code I used to check this out. Note: This only works with version iOS 8 and higher:

UIScreen *mainScreen = [UIScreen mainScreen]; NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",           NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale); 

Code for detecting iPhone 6 Plus:

#define IS_PAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_PHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)  -(BOOL)iPhone6PlusDevice{     if (!IS_PHONE) return NO;     if ([UIScreen mainScreen].scale > 2.9) return YES;   // Scale is only 3 when not in scaled mode for iPhone 6 Plus     return NO; } 

or

-(BOOL) iPhone6PlusUnZoomed{     if ([self iPhone6PlusDevice]){         if ([UIScreen mainScreen].bounds.size.height > 720.0) return YES;  // Height is 736, but 667 when zoomed.     }     return NO; } 

Note: If you are checking for iPhone 6 Plus, to adjust the user interface then don´t rely on .nativeScale, because the simulator and actual device give different results. Due to the comment below. Scale is a CGFloat and thus, code should not check equality, because some floats values may never be equal.


After adding Launch Screen you can utilise the new iPhone sizes, otherwise your app will still look scaled.

Updated for the new iPhones 11, 11 Pro and 11 Pro Max

Size for iPhone 11 Pro Max with @3x scaling, coordinate space: 414 x 896 points and 1242 x 2688 pixels, 458 ppi, device physical size is 3.06 x 6.22 in or 77.8 x 158.0 mm. 6.5" Super Retina XDR display.

Size for iPhone 11 Pro with @3x scaling, coordinate space: 375 x 812 points and 1125 x 2436 pixels, 458 ppi, device physical size is 2.81 x 5.67 in or 71.4 x 144.0 mm. 5.8" Super Retina XDR display.

Size for iPhone 11 with @2x scaling, coordinate space: 414 x 896 points and 828 x 1792 pixels, 326 ppi, device physical size is 2.98 x 5.94 in or 75.7 x 150.9 mm. 6.1" Liquid Retina HD display.

Size for iPhone X🅂 Max with @3x scaling (Apple name: Super Retina HD 6.5 display"), coordinate space: 414 x 896 points and 1242 x 2688 pixels, 458 ppi, device physical size is 3.05 x 6.20 in or 77.4 x 157.5 mm.

let screen = UIScreen.main print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)") //iPhone X🅂 Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0 

Size for iPhone X🅁 with @2x scaling (Apple name: Super Retina HD 6.1" display), coordinate space: 414 x 896 points and 828 x 1792 pixels, 326 ppi, device physical size is 2.98 x 5.94 in or 75.7 x 150.9 mm.

let screen = UIScreen.main print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)") //iPhone X🅁 Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0 

Size for iPhone X🅂 and iPhone X with @3x scaling (Apple name: Super Retina HD 5.8" display), coordinate space: 375 x 812 points and 1125 x 2436 pixels, 458 ppi, device physical size is 2.79 x 5.65 in or 70.9 x 143.6 mm.

let screen = UIScreen.main print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)") //iPhone X🅂 and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0 

Size for iPhone 8, 7, 6 Plus and iPhone 8, 7, 6S Plus with @3x scaling (Apple name: Retina HD 5.5), Coordinate space: 414 x 736 points and 1242 x 2208 pixels, 401 ppi, screen physical size is 2.7 x 4.8 in or 68 x 122 mm:

Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}};  mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000 

Size for iPhone 6 and iPhone 6S with @2x scaling (Apple name: Retina HD 4.7), Coordinate space: 375 x 667 points and 750 x 1334 pixels, 326 ppi, screen physical size is 2.3 x 4.1 in or 58 x 104 mm:

Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}};  mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000 

And iPhone 5 for comparison is 640 x 1136, iPhone 4 640 x 960.

Note: Upload LaunchImages otherwise the app will run scaled and not show correct scaling, or screen sizes.

Comparing iPhone 6 and 6 Plus

like image 177
Sverrisson Avatar answered Sep 22 '22 14:09

Sverrisson


If you prefer macros here are the ones, that you can use to differentiate between the iPhone models. These are based on the point values.

#define IS_IPHONE_4 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)480) < DBL_EPSILON) #define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON) #define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON) #define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON) 
like image 22
bkhayll Avatar answered Sep 24 '22 14:09

bkhayll