所以我有一个按钮/图像,我希望在iPad或更小的iPhone上观看时更高/更小。
在Xcode> 7中,我可以将我的项目放在W / all H / all中,然后我可以将约束放在紧凑的宽度/任何高度,如果我想要它在iPhone肖像中。但是在Xcode 8中它是一个全新的系统而且我现在不知道该怎么做,所以我想根据屏幕的大小改变按钮的高度,怎么做呢?
我试图在网上搜索,找到一些约束出口的东西。如果我有自动布局,那可行吗?
答案 0 :(得分:3)
如果你想在没有代码的情况下这样做,使用大小类你可以使用紧凑的宽度大小类,它适用于所有方向的所有iPhone(除iPhone6 plus之外的大型iPhone)。紧凑的宽度仅在分屏时与iPad匹配。
添加vairant:
- 为您的按钮添加高度约束并将其设置为50(这将为any/any
尺寸类添加约束):
Constant
compact
,为其他人选择any
wC
的高度常量并将其设置为30 其他方法是在代码中使用UIUserInterfaceIdiom
枚举设置高度,例如:
if UIDevice.current.userInterfaceIdiom == .pad {
//adjust size for iPads
}else{
//adjust size for others
}
答案 1 :(得分:2)
您可以使用:
Swift 3
class ViewController: UIViewController {
let screenSize: CGRect = UIScreen.main.bounds
@IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
@IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
buttonHeightContraint.constant = (screenSize.height / 2)
buttonWidthContraint.constant = (screenSize.width / 2)
}
}
Swift 2
class ViewController: UIViewController {
let screenSize: CGRect = UIScreen.mainScreen().bounds
@IBOutlet weak var buttonWidthContraint: NSLayoutConstraint!
@IBOutlet weak var buttonHeightContraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
buttonHeightContraint.constant = (screenSize.height / 2)
buttonWidthContraint.constant = (screenSize.width / 2)
}
}
这样UIButton.height
始终是屏幕/ 2的大小。
只需查看您需要的正确商数即可。例如(screenSize.height / 25.3)
,然后在iPad上,在每个iPhone上等等,按钮将始终具有高度,具体取决于设备。
另一种可能性是UIDeviceExtension
import Foundation
import UIKit
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 where value != 0 else { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
switch identifier {
case "iPod5,1": return "iPod Touch 5"
case "iPod7,1": return "iPod Touch 6"
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4"
case "iPhone4,1": return "iPhone 4s"
case "iPhone5,1", "iPhone5,2": return "iPhone 5"
case "iPhone5,3", "iPhone5,4": return "iPhone 5c"
case "iPhone6,1", "iPhone6,2": return "iPhone 5s"
case "iPhone7,2": return "iPhone 6"
case "iPhone7,1": return "iPhone 6 Plus"
case "iPhone8,1": return "iPhone 6s"
case "iPhone8,2": return "iPhone 6s Plus"
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3"
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4"
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air"
case "iPad5,3", "iPad5,4": return "iPad Air 2"
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini"
case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad Mini 2"
case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad Mini 3"
case "iPad5,1", "iPad5,2": return "iPad Mini 4"
case "iPad6,7", "iPad6,8": return "iPad Pro"
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4", "iPad3,1", "iPad3,2", "iPad3,3", "iPad3,4", "iPad3,5", "iPad3,6", "iPad4,1", "iPad4,2", "iPad4,3", "iPad5,3", "iPad5,4", "iPad2,5", "iPad2,6", "iPad2,7", "iPad4,4", "iPad4,5", "iPad4,6", "iPad4,7", "iPad4,8", "iPad4,9", "iPad5,1", "iPad5,2": return "iPad"
case "AppleTV5,3": return "Apple TV"
case "i386", "x86_64": return "Simulator"
default: return identifier
}
}
}
用作以下(例如):
let modelName = UIDevice.currentDevice().modelName
if modelName == "iPad" {
buttonOutlet.frame.size.height = 42
} else if modelName == "iPhone 4" {
buttonOutlet.frame.size.height = 25
}
等等。