comment vérifier la taille de l'écran de l'iphone 4 et l'iphone 5 par programmation dans swift

je dois remplacer cet objectif-C à Swift. Quelqu'un aurait-il des suggestions sur la façon de le transférer?

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}
35
demandé sur Caleb Kleveter 2015-01-05 11:28:57

9 réponses

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 iPhones_4_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 iPhones_X_XS = "iPhone X or iPhone XS"
        case iPhone_XR = "iPhone XR"
        case iPhone_XSMax = "iPhone XS Max"
        case unknown
    }
    var screenType: ScreenType {
        switch UIScreen.main.nativeBounds.height {
        case 960:
            return .iPhones_4_4S
        case 1136:
            return .iPhones_5_5s_5c_SE
        case 1334:
            return .iPhones_6_6s_7_8
        case 1792:
            return .iPhone_XR
        case 1920, 2208:
            return .iPhones_6Plus_6sPlus_7Plus_8Plus
        case 2436:
            return .iPhones_X_XS
        case 2688:
            return .iPhone_XSMax
        default:
            return .unknown
        }
    }
}

print("screenType:", UIDevice.current.screenType)
102
répondu Leo Dabus 2018-09-30 23:29:12

solution Alternative avec UIScreen extension ( iOS 8 et les versions ultérieures):

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
    }
}

Utilisation:

if UIScreen.mainScreen().sizeType == .iPhone4 {
    // Make specific layout for small devices.
}
21
répondu Vlad Papko 2015-11-27 08:26:04
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.écran principal().lier.taille.la hauteur fournira la hauteur de l'appareil. En utilisant cette valeur, nous pouvons vérifier l'appareil iphone particulier.

5
répondu Sudhi 9135 2016-05-25 14:03:00

pour ajouter https://stackoverflow.com/a/27776671/1766242

vous permet d'écrire

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

voir ci-dessous

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
}}
3
répondu maninvan 2017-05-23 12:18:02

nouvelle mise à jour avec iPhone XS, iPhone XS Max & iPhone XR

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 iPhoneXR = "iPhone XR"
        case iPhoneX_iPhoneXS = "iPhone X,iPhoneXS"
        case iPhoneXSMax = "iPhoneXS Max"
        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 1792:
            return .iPhoneXR
        case 1920, 2208:
            return .iPhones_6Plus_6sPlus_7Plus_8Plus
        case 2436:
            return .iPhoneX_iPhoneXS
        case 2688:
            return .iPhoneXSMax
        default:
            return .unknown
        }
    }
}

print ("screenType:", UIDevice.actuel.screenType.valeur brute)

2
répondu Sujal 2018-09-13 05:14:32

En plus de la manière proposée, Une façon de le faire est d'utiliser la structure de la manière suivante.

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
}

dites-moi si ça aide.

1
répondu tendstoZero 2017-10-11 00:12:28

essayez d'utiliser ceci:

créer un UIViewController+Extension.swift fichier: et mis dans le code ci-dessous:

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)
            }
        }
    }
}

et utilisez-le dans votre viewController .swift comme ceci:

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

, vous pouvez ajouter plus de cas si vous voulez le faire. En profiter.

0
répondu gandhi Mena 2018-05-18 17:59:07

réponse de Léo la répara pour moi. Voici quelques exemples de classe pour tous les Xamarin.IOS devs:)

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;
            }
        }
    }
}
0
répondu Jelle 2018-08-22 13:03:54

vous pouvez également essayer ce code ci-dessous:

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

Merci.

-3
répondu Gangani Roshan 2018-01-06 04:58:11