How can I detect whether a user has an iPhone 6 Plus in standard or zoomed mode?
There's a new member
[[UIScreen mainScreen] nativeScale]
which should do what you want. It's only available on iOS 8, so you'll need to guard it
[UIScreen mainScreen].currentMode
reports:
<UIScreenMode: 0x17802f240; size = 1242.000000 x 2208.000000> // STANDARD<UIScreenMode: 0x178226be0; size = 1125.000000 x 2001.000000> // ZOOMED
The following code may be used to get bounds
, coordinateSpace
, nativeScale
and scale
, i.e. on an iPhone 6 Plus the nativeScale
is 2.608 and when the device in run in Zoomed Mode it is 2.88 (note that it is different in the simulator):
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:
-(BOOL)iPhone6PlusDevice{ // Scale is 3 currently only for iPhone 6 Plus if ([UIScreen mainScreen].scale > 2.9) return YES; 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 an actual device give different results.