Swift - how do I find the screen size of the user’s device?

Asked

Viewed 419 times

2

I would like to know how I discover the screen size that the user is using or the model of your iPhone via Swift. I only know how to do it in Objective-C

Response in Objective-C:

    CGFloat screenScale = [[UIScreen mainScreen] scale];
    NSLog(@"Escala %f", screenScale);
    
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    NSLog(@"Bounds %@", screenBounds);
    
    CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
    NSLog(@"Pixels %f", screenSize);        
    NSString *result = [NSString stringWithFormat:@"%f", screenSize];

2 answers

1


That one extension below helps you to know which model of the device, soon you will know which screen size.

public extension UIDevice {

  var modelName: String {
    var systemInfo = utsname()
    uname(&systemInfo)
    let machineMirror = Mirror(reflecting: systemInfo.machine)
    let identifier = machineMirror.children.reduce("") { identifier, element in
      guard let value = element.value as? Int8 where value != 0 else { return identifier }
      return identifier + String(UnicodeScalar(UInt8(value)))
    }

    switch identifier {
    case "iPod5,1":                                 return "iPod Touch 5"
    case "iPod7,1":                                 return "iPod Touch 6"
    case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
    case "iPhone4,1":                               return "iPhone 4s"
    case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
    case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
    case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
    case "iPhone7,2":                               return "iPhone 6"
    case "iPhone7,1":                               return "iPhone 6 Plus"
    case "iPhone8,1":                               return "iPhone 6s"
    case "iPhone8,2":                               return "iPhone 6s Plus"
    case "iPhone8,4":                               return "iPhone SE"
    case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
    case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
    case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
    case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
    case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
    case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
    case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
    case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
    case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
    case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":return "iPad Pro"
    case "AppleTV5,3":                              return "Apple TV"
    case "i386", "x86_64":                          return "Simulator"
    default:                                        return identifier
    }
  }
}

Example of use:

let iPhoneName = UIDevice.currentDevice().modelName

switch iPhoneName {
case "iPhone 4s", "iPhone 4":
  break
case "iPhone 5", "iPhone 5s":
  break
default:
  break
}

Follow a guide to the sizes of iPhones screens:

inserir a descrição da imagem aqui

1

The translation of this code to Swift is as follows:

let screenScale = UIScreen.mainScreen().scale
NSLog("Escala \(screenScale)")

let screenBounds = UIScreen.mainScreen().bounds
NSLog("Bounds \(screenBounds)")

let screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale)
NSLog("Pixels \(screenSize)")
let result = "\(screenSize)"

Remembering that we should never treat the screen as pixels, but how points. To Scale screen serves for you to decide how to render drawings or images manually, for example. The system that should deal with the conversion of points for pixels. Recommended reading: iOS Drawing Concepts

Another interesting feature is the use of Size Classes, that abstract the question of screen dimensions. More details here: Adaptivity and Layout

Browser other questions tagged

You are not signed in. Login or sign up in order to post.