How to programmatically detect iPhone XS or iPhone X?
本问题已经有最佳答案,请猛点这里访问。
我的一个应用程序连接到一个Web应用程序服务,该服务向用户提供设备特定的新闻。为了适应最新的iPhone版本,我需要通过编程区分iPhone XS和iPhone X。如何做到这一点?
有没有其他方法可以检测最新版本的iPhone?
编辑:这不是"如何检测iPhone X"问题的重复,因为这里讨论的所有答案/解决方案都使用屏幕尺寸来指定设备类型。如前所述,iPhoneX和iPhoneXS的尺寸完全相同,因此解决方案无法区分这两者…
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | if UIDevice().userInterfaceIdiom == .phone { switch UIScreen.main.nativeBounds.height { case 1136: print("IPHONE 5,5S,5C") case 1334: print("IPHONE 6,7,8 IPHONE 6S,7S,8S") case 1920, 2208: print("IPHONE 6PLUS, 6SPLUS, 7PLUS, 8PLUS") case 2436: print("IPHONE X, IPHONE XS") case 2688: print("IPHONE XS_MAX") case 1792: print("IPHONE XR") default: print("UNDETERMINED") } } |
即使方向改变,
我使用devicetuil来确定iOS设备的型号。
根据此deviceUtil github post,返回的uidevice hardwarestring值为:
1 2 3 | iPhone11,2 = iPhone XS iPhone11,4 = iPhone XS Max iPhone11,8 = iPhone XR |
奇怪的是,Xcode10gm模拟器的[uiscreen mainscreen].bounds.size为iPhoneX、XS、XS max和R设备返回375x 812。我原以为XS max和XR是414 x 896。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | +(NSString*)deviceName { struct utsname systemInfo; uname(&systemInfo); NSString *machineName = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; NSDictionary *commonNamesDictionary = @{ @"i386": @"i386 Simulator", @"x86_64": @"x86_64 Simulator", @"iPhone1,1": @"iPhone", @"iPhone1,2": @"iPhone 3G", @"iPhone2,1": @"iPhone 3GS", @"iPhone3,1": @"iPhone 4", @"iPhone3,2": @"iPhone 4", @"iPhone3,3": @"iPhone 4", @"iPhone4,1": @"iPhone 4S", @"iPhone5,1": @"iPhone 5", @"iPhone5,2": @"iPhone 5", @"iPhone5,3": @"iPhone 5c", @"iPhone5,4": @"iPhone 5c", @"iPhone6,1": @"iPhone 5s", @"iPhone6,2": @"iPhone 5s", @"iPhone7,1": @"iPhone 6+", @"iPhone7,2": @"iPhone 6", @"iPhone8,1": @"iPhone 6S", @"iPhone8,2": @"iPhone 6S+", @"iPhone8,4": @"iPhone SE", @"iPhone9,1": @"iPhone 7", @"iPhone9,2": @"iPhone 7+", @"iPhone9,3": @"iPhone 7", @"iPhone9,4": @"iPhone 7+", @"iPhone10,1": @"iPhone 8", @"iPhone10,2": @"iPhone 8+", @"iPhone10,3": @"iPhone X", @"iPhone11,2": @"iPhone XS", @"iPhone11,4": @"iPhone XS Max", @"iPhone11,8": @"iPhone XR", @"iPad1,1": @"iPad", @"iPad2,1": @"iPad 2", @"iPad2,2": @"iPad 2", @"iPad2,3": @"iPad 2", @"iPad2,4": @"iPad 2", @"iPad2,5": @"iPad Mini 1G", @"iPad2,6": @"iPad Mini 1G", @"iPad2,7": @"iPad Mini 1G", @"iPad3,1": @"iPad 3", @"iPad3,2": @"iPad 3", @"iPad3,3": @"iPad 3", @"iPad3,4": @"iPad 4", @"iPad3,5": @"iPad 4", @"iPad3,6": @"iPad 4", @"iPad4,1": @"iPad Air", @"iPad4,2": @"iPad Air", @"iPad4,3": @"iPad Air", @"iPad5,3": @"iPad Air 2", @"iPad5,4": @"iPad Air 2", @"iPad4,4": @"iPad Mini 2G", @"iPad4,5": @"iPad Mini 2G", @"iPad4,6": @"iPad Mini 2G", @"iPad4,7": @"iPad Mini 3G", @"iPad4,8": @"iPad Mini 3G", @"iPad4,9": @"iPad Mini 3G", @"iPod1,1": @"iPod 1st Gen", @"iPod2,1": @"iPod 2nd Gen", @"iPod3,1": @"iPod 3rd Gen", @"iPod4,1": @"iPod 4th Gen", @"iPod5,1": @"iPod 5th Gen", @"iPod7,1": @"iPod 6th Gen", }; NSString *deviceName = commonNamesDictionary[machineName]; if (deviceName == nil) { deviceName = machineName; } return deviceName; } |
它将为您返回设备型号,还包括xs、xr、xs max
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0) #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_IPHONE_X (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0) #define IS_IPHONE_X (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0) #define IS_IPHONE_XS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0) #define IS_IPHONE_X_MAX (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 896.0) #define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) // 3.0 for iPhone X, 2.0 for others #define IS_IPAD_DEVICE [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] |
注意:小心,它只适用于纵向