Detect current device with UI_USER_INTERFACE_IDIOM() in Swift Detect current device with UI_USER_INTERFACE_IDIOM() in Swift ios ios

Detect current device with UI_USER_INTERFACE_IDIOM() in Swift


When working with Swift, you can use the enum UIUserInterfaceIdiom, defined as:

enum UIUserInterfaceIdiom : Int {    case unspecified        case phone // iPhone and iPod touch style UI    case pad   // iPad style UI (also includes macOS Catalyst)}

So you can use it as:

UIDevice.current.userInterfaceIdiom == .padUIDevice.current.userInterfaceIdiom == .phoneUIDevice.current.userInterfaceIdiom == .unspecified

Or with a Switch statement:

    switch UIDevice.current.userInterfaceIdiom {    case .phone:        // It's an iPhone    case .pad:        // It's an iPad (or macOS Catalyst)     @unknown default:        // Uh, oh! What could it be?    }

UI_USER_INTERFACE_IDIOM() is an Objective-C macro, which is defined as:

#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)

Also, note that even when working with Objective-C, the UI_USER_INTERFACE_IDIOM() macro is only required when targeting iOS 3.2 and below. When deploying to iOS 3.2 and up, you can use [UIDevice userInterfaceIdiom] directly.


You should use this GBDeviceInfo framework or ...

Apple defines this:

public enum UIUserInterfaceIdiom : Int {    case unspecified    case phone // iPhone and iPod touch style UI    case pad // iPad style UI    @available(iOS 9.0, *)    case tv // Apple TV style UI    @available(iOS 9.0, *)    case carPlay // CarPlay style UI}

so for the strict definition of the device can be used this code

struct ScreenSize{    static let SCREEN_WIDTH         = UIScreen.main.bounds.size.width    static let SCREEN_HEIGHT        = UIScreen.main.bounds.size.height    static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)    static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)}struct DeviceType{    static let IS_IPHONE_4_OR_LESS  = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0    static let IS_IPHONE_5          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0    static let IS_IPHONE_6_7          = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0    static let IS_IPHONE_6P_7P         = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0    static let IS_IPAD              = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0    static let IS_IPAD_PRO          = UIDevice.current.userInterfaceIdiom == .pad && ScreenSize.SCREEN_MAX_LENGTH == 1366.0}

how to use

if DeviceType.IS_IPHONE_6P_7P {    print("IS_IPHONE_6P_7P")}

to detect iOS version

struct Version{    static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue    static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)    static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)    static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)}

how to use

if Version.iOS8 {    print("iOS8")}


Swift 2.0 & iOS 9 & Xcode 7.1

// 1. request an UITraitCollection instancelet deviceIdiom = UIScreen.mainScreen().traitCollection.userInterfaceIdiom// 2. check the idiomswitch (deviceIdiom) {case .Pad:    print("iPad style UI")case .Phone:    print("iPhone and iPod touch style UI")case .TV:     print("tvOS style UI")default:    print("Unspecified UI idiom")}

Swift 3.0 and Swift 4.0

// 1. request an UITraitCollection instancelet deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom// 2. check the idiomswitch (deviceIdiom) {case .pad:    print("iPad style UI")case .phone:    print("iPhone and iPod touch style UI")case .tv:     print("tvOS style UI")default:    print("Unspecified UI idiom")}

Use UITraitCollection.The iOS trait environment is exposed though the traitCollection property of the UITraitEnvironment protocol. This protocol is adopted by the following classes:

  • UIScreen
  • UIWindow
  • UIViewController
  • UIPresentationController
  • UIView