How can I detect whether a user has an iPhone 6 Plus in standard or zoomed mode?

后端 未结 5 1002
时光取名叫无心
时光取名叫无心 2020-11-27 16:59

How can I detect whether a user has an iPhone 6 Plus in standard or zoomed mode? Is this possible?

I\'ve tried [UIScreen mainScreen].scale and it report

相关标签:
5条回答
  • 2020-11-27 17:31

    Updated macros from Paula Chavarría's answer for iOS 8 (where [UIScreen mainScreen].bounds.size is orientation dependent):

    #define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 (IS_IPHONE && (MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0) && ((IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale) || !IS_OS_8_OR_LATER))
    #define IS_STANDARD_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0  && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale == [UIScreen mainScreen].scale)
    #define IS_ZOOMED_IPHONE_6 (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 568.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale > [UIScreen mainScreen].scale)
    #define IS_STANDARD_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 736.0)
    #define IS_ZOOMED_IPHONE_6_PLUS (IS_IPHONE && MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width) == 667.0 && IS_OS_8_OR_LATER && [UIScreen mainScreen].nativeScale < [UIScreen mainScreen].scale)
    #define IS_IPHONE_6 (IS_STANDARD_IPHONE_6 || IS_ZOOMED_IPHONE_6)
    #define IS_IPHONE_6_PLUS (IS_STANDARD_IPHONE_6_PLUS || IS_ZOOMED_IPHONE_6_PLUS)
    
    0 讨论(0)
  • 2020-11-27 17:44

    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

    0 讨论(0)
  • 2020-11-27 17:44

    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.

    0 讨论(0)
  • 2020-11-27 17:44

    [UIScreen mainScreen].currentMode reports:

    <UIScreenMode: 0x17802f240; size = 1242.000000 x 2208.000000> // STANDARD
    <UIScreenMode: 0x178226be0; size = 1125.000000 x 2001.000000> // ZOOMED
    
    0 讨论(0)
  • 2020-11-27 17:51

    These option is used to detect iPhone Devices.

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
    #define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
    #define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
    #define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
    #define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0) 
    
    0 讨论(0)
提交回复
热议问题