Ios 如何检测iPhone 6s和6s+;

Ios 如何检测iPhone 6s和6s+;,ios,iphone,swift,xcode6,Ios,Iphone,Swift,Xcode6,我的应用程序需要知道哪个iphone设备正在运行,并以此为基础进行一些屏幕调整。 我使用以下代码来决定使用哪个iphone 但是有没有办法知道是6S还是6S加? 因此,关键是如果不是device.swift中提到的设备之一,则不知道如何调整屏幕,并将显示不支持的设备,但我希望该应用程序的行为与iPhone 6s的iPhone 6相同,与iPhone 6s Plus的iPhone 6 Plus相同 谢谢如果您使用的是自动布局您不需要检查您的应用程序运行到哪个iPhone,更改将自动进行。基于您的

我的应用程序需要知道哪个iphone设备正在运行,并以此为基础进行一些屏幕调整。 我使用以下代码来决定使用哪个iphone

但是有没有办法知道是6S还是6S加? 因此,关键是如果不是device.swift中提到的设备之一,则不知道如何调整屏幕,并将显示不支持的设备,但我希望该应用程序的行为与iPhone 6s的iPhone 6相同,与iPhone 6s Plus的iPhone 6 Plus相同


谢谢

如果您使用的是
自动布局
您不需要检查您的应用程序运行到哪个iPhone,更改将自动进行。

基于您的文件Device.swift, 插入:

根据:

    case iPhone6Plus
并插入:

    case "iPhone8,1":                               self = iPhone6S
    case "iPhone8,2":                               self = iPhone6SPlus
根据:

    case "iPhone7,1":                               self = iPhone6Plus

您可以通过获取设备型号以编程方式执行此操作:

#import <sys/utsname.h>

NSString* deviceName()
{
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
}

您可以使用此
开关

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, value != 0 else { return identifier }
        return identifier + String(UnicodeScalar(UInt8(value)))
    }

    switch identifier {
    case "iPhone3,1", "iPhone3,2", "iPhone3,3", "iPhone4,1":
        return "iPhone 4"

    case "iPhone5,1", "iPhone5,2", "iPhone5,3", "iPhone5,4", "iPhone6,1", "iPhone6,2", "iPhone8,4":
        return "iPhone 5"

    case "iPhone7,2", "iPhone8,1", "iPhone9,1", "iPhone9,3":
        return "iPhone 6,7"

    case "iPhone7,1", "iPhone8,2", "iPhone9,2", "iPhone9,4":
        return "iPhone Plus"

    case "i386", "x86_64":
        return "Simulator"
    default:
        return identifier
    }
}
}

那么我的代码是:

switch UIDevice.current.modelName {
    case "iPhone 4":
        //Your code here
    case "iPhone 5":
        //Your code here
    case "iPhone 6,7":
        //Your code here
    case "iPhone Plus", "Simulator":
        //Your code here
    default:
        break
    }

是的,我知道关于自动布局,但我遇到了一些问题,我不得不做一些调整,但现在改变设计已经太晚了。我同意这不是我做的最好的事情。因此,对于第一个版本,我将使用我拥有的,并在下一个版本中进行更改。最好的方法是将“硬件字符串”从这里匹配到
uname
函数输出。你们的图书馆过期了谢谢,这就是我要找的案例“iPhone8,1”:和案例“iPhone8,2”:
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, value != 0 else { return identifier }
        return identifier + String(UnicodeScalar(UInt8(value)))
    }

    switch identifier {
    case "iPhone3,1", "iPhone3,2", "iPhone3,3", "iPhone4,1":
        return "iPhone 4"

    case "iPhone5,1", "iPhone5,2", "iPhone5,3", "iPhone5,4", "iPhone6,1", "iPhone6,2", "iPhone8,4":
        return "iPhone 5"

    case "iPhone7,2", "iPhone8,1", "iPhone9,1", "iPhone9,3":
        return "iPhone 6,7"

    case "iPhone7,1", "iPhone8,2", "iPhone9,2", "iPhone9,4":
        return "iPhone Plus"

    case "i386", "x86_64":
        return "Simulator"
    default:
        return identifier
    }
}
switch UIDevice.current.modelName {
    case "iPhone 4":
        //Your code here
    case "iPhone 5":
        //Your code here
    case "iPhone 6,7":
        //Your code here
    case "iPhone Plus", "Simulator":
        //Your code here
    default:
        break
    }