我的代码运行,但问题是tab
图像没有重新定位到我在代码中设置的位置。它停留在viewController
的所在位置,并没有变得更大或更动人。我试图让它更大。
@IBOutlet weak var tab: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
if UIDevice.current.model == "iPhone4,1" {
tab.frame = CGRect(x: 130, y: 122, width: 60, height: 60)
} else if UIDevice.current.model == "iPhone5,1" {
tab.frame = CGRect(x: 130, y: 171, width: 75, height: 75)
}
}
答案 0 :(得分:0)
如果条件都将为false,因此代码永远不会被执行,这是因为 UIDevice.current.model 将返回" iPhone& #34; ," iPod touch" 或" iPad" 而非硬件型号。正确的方法是:
override func viewDidLoad() {
super.viewDidLoad()
var systemInfo = utsname()
uname(&systemInfo)
// Retrive the device model
let model = Mirror(reflecting: systemInfo.machine).children.reduce("") { model, element in
guard let value = element.value as? Int8, value != 0 else { return model }
return model + String(UnicodeScalar(UInt8(value)))
}
if model == "iPhone4,1" {
tab.frame = CGRect(x: 130, y: 122, width: 60, height: 60)
} else if model == "iPhone5,1" {
tab.frame = CGRect(x: 130, y: 171, width: 75, height: 75)
}
}
相反,更强大的方法是检查屏幕尺寸,iPhone 4s和更低型号的屏幕尺寸 320x480 点,iPhone 5的屏幕尺寸 320x568 点,其他设备有更大的屏幕尺寸。但此代码只能在 iPhone 4s 或 GSM iPhone 5 上运行 不能在其他设备上运行,例如: CDMA iPhone 5 或 iPhone 6 或任何其他设备 其他型号包括iPad。
我们将定位特定尺寸,而不是定位某个设备。因此,如果屏幕高度大于 480 点,我们在第一个if块内部运行代码,否则我们在第二个块上运行代码,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
if UIScreen.main.bounds.size.height > 480 {
tab.frame = CGRect(x: 130, y: 122, width: 60, height: 60)
} else {
tab.frame = CGRect(x: 130, y: 171, width: 75, height: 75)
}
}
但请记住,这是一种非常糟糕的做法,您应该使用Auto Layout代替。
答案 1 :(得分:0)
尝试以下方法:
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)))
}
return identifier
}
}
然后在你的代码调用中:
if UIDevice.current.modelName == "iPhone4,1" {
tab.frame = CGRect(x: 130, y: 122, width: 60, height: 60)
} else if UIDevice.current.modelName == "iPhone5,1" {
tab.frame = CGRect(x: 130, y: 171, width: 75, height: 75)
}