como verificar o tamanho da canvas do iphone 4 e iphone 5 programaticamente em swift

Eu preciso replace este Objective-C para Swift. Alguém tem alguma sugestão sobre como transferi-lo?

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { CGSize result = [[UIScreen mainScreen] bounds].size; if(result.height == 480) { // iPhone Classic } if(result.height == 568) { // iPhone 5 } } 

Xcode 9 • Swift 4

 extension UIDevice { var iPhoneX: Bool { return UIScreen.main.nativeBounds.height == 2436 } var iPhone: Bool { return UIDevice.current.userInterfaceIdiom == .phone } enum ScreenType: String { case iPhone4_4S = "iPhone 4 or iPhone 4S" case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE" case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8" case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus" case iPhoneX = "iPhone X" case unknown } var screenType: ScreenType { switch UIScreen.main.nativeBounds.height { case 960: return .iPhone4_4S case 1136: return .iPhones_5_5s_5c_SE case 1334: return .iPhones_6_6s_7_8 case 1920, 2208: return .iPhones_6Plus_6sPlus_7Plus_8Plus case 2436: return .iPhoneX default: return .unknown } } } 

 print("screenType:", UIDevice.current.screenType.rawValue) 

Solução alternativa com extensão UIScreen (iOS 8 e posterior):

 extension UIScreen { enum SizeType: CGFloat { case Unknown = 0.0 case iPhone4 = 960.0 case iPhone5 = 1136.0 case iPhone6 = 1334.0 case iPhone6Plus = 1920.0 } var sizeType: SizeType { let height = nativeBounds.height guard let sizeType = SizeType(rawValue: height) else { return .Unknown } return sizeType } } 

Uso:

 if UIScreen.mainScreen().sizeType == .iPhone4 { // Make specific layout for small devices. } 
 if UIDevice().userInterfaceIdiom == .Phone { switch UIScreen.mainScreen().bounds.size.height{ case 480: print("iPhone 4S") case 568: print("iPhone 5") default: print("other models") } } 

UIScreen.mainScreen (). Bounds.size.height fornecerá a altura do dispositivo. Ao usar esse valor, podemos verificar o dispositivo do iPhone em particular.

Apenas para adicionar a https://stackoverflow.com/a/27776671/1766242

Permite que você escreva

 if UIDevice.isScreen35inch() { // Do something to fit small screen } else { // do something else for larger screens } 

Ver abaixo

 extension UIDevice { var iPhone: Bool { return UIDevice().userInterfaceIdiom == .Phone } enum ScreenType: String { case iPhone4 case iPhone5 case iPhone6 case iPhone6Plus case Unknown } var screenType: ScreenType? { guard iPhone else { return nil } switch UIScreen.mainScreen().nativeBounds.height { case 960: return .iPhone4 case 1136: return .iPhone5 case 1334: return .iPhone6 case 2208: return .iPhone6Plus default: return nil } } // helper funcs static func isScreen35inch() -> Bool { return UIDevice().screenType == .iPhone4 } func isScreen4inch() -> Bool { return UIDevice().screenType == .iPhone5 } func isScreen47inch() -> Bool { return UIDevice().screenType == .iPhone6 } func isScreen55inch() -> Bool { return UIDevice().screenType == .iPhone6Plus }} 

Além do modo proposto, uma maneira de fazer isso é usar a estrutura da seguinte maneira.

 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 = UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 static let IS_IPHONE_6P = 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 } 

Deixe-me saber se isso ajuda.

tente usar isso:

Crie um arquivo UIViewController + Extension.swift : e coloque o código abaixo:

 enum DeviceTypeModel{ case iphoneX case iphone8Plus case iphone8 case iphoneSE //SE is the like iphone 5 and iphone 5s case iphone4s } extension UIViewController{ func runOnTheDeviceType(_ completion: (DeviceTypeModel) -> Void) { if UIDevice().userInterfaceIdiom == .phone{ switch UIScreen.main.nativeBounds.height{ case 2436: completion(.iphoneX) case 1920: completion(.iphone8Plus) case 1334: completion(.iphone8) case 1136: completion(.iphoneSE) default: completion(.iphone4s) } } } } 

e usá-lo em seu viewController.swift como este:

 class ChatViewController: UIViewController{ override func viewDidLoad() { super.viewDidLoad() runOnTheDeviceType { devices in switch devices{ case .iphoneSE: //do something case .iphone4s: //do something default: //do something } } } } 

você pode adicionar mais casos, se você quiser fazê-lo. Aproveite.

A resposta de Leo corrigiu para mim. Aqui está uma amostra de class para todos os desenvolvedores Xamarin.IOS 🙂

 public static class ScreenHelper { public enum ScreenSizeType { iPhone4_4s, iPhone5_5s_5c_SE, iPhone6_6s_7_8, iPhone6plus_6sPlus_7Plus_8Plus, iPhoneX, unknown } public static bool IsIphone { get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; } } public static bool IsNarrowScreen { get { return UIScreen.MainScreen.NativeBounds.Width <= 640; } } public static ScreenSizeType CurrentScreenType { get { switch ((int)UIScreen.MainScreen.NativeBounds.Height) { case 960: return ScreenSizeType.iPhone4_4s; case 1136: return ScreenSizeType.iPhone5_5s_5c_SE; case 1334: return ScreenSizeType.iPhone6_6s_7_8; case 1920: case 2208: return ScreenSizeType.iPhone6plus_6sPlus_7Plus_8Plus; case 2436: return ScreenSizeType.iPhoneX; default: return ScreenSizeType.unknown; } } } } 

Você também pode tentar isto abaixo:

  if (IS_IPHONE4) { imgHeight.constant = 150; } else if (IS_IPAD) { imgHeight.constant = 300; } else if (IS_IPHONE5) { imgHeight.constant = 170; } else { imgHeight.constant = 200; } 

Obrigado.