Как проверить размер экрана iphone 4 и iphone 5 программно в быстром

Мне нужно заменить этот Objective-C на Swift. Есть ли у кого-нибудь какие-либо предложения по его передаче?

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

Ответ 1

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)

Ответ 2

Альтернативное решение с расширением UIScreen (iOS 8 и более поздние версии):

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

Использование:

if UIScreen.mainScreen().sizeType == .iPhone4 {
    // Make specific layout for small devices.
}

Ответ 3

Просто добавьте fooobar.com/questions/56019/...

Позволяет писать

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

См. ниже

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

Ответ 4

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 обеспечит высоту устройства. Используя это значение, мы можем проверить конкретное устройство iphone.

Ответ 5

В дополнение к предложенному пути, один из способов сделать это - использовать структуру следующим образом.

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
}

Сообщите мне, если это поможет.