在移除高度锚点之后,下面是输出
精确常数的屏幕截图
下面是视图控制器设计。从IB截取了屏幕截图。
我想更改使用Interface Builder创建的UIButton的位置和大小。我正在使用约束以编程方式进行此操作。 还学习约束。 我已经写了约束代码。请帮助我。
let size = self.view.frame.size.height -
(self.layer.frame.size.height + (self.navigationController?.navigationBar.frame.height)! + 20)
channelShowBtn?.translatesAutoresizingMaskIntoConstraints = false
channelShowBtn!.topAnchor.constraint(equalTo:self.view.topAnchor , constant:(((20 + (navigationController?.navigationBar.frame.height)!) + self.layer.frame.height))).isActive = true
channelShowBtn!.heightAnchor.constraint(equalToConstant:size).isActive = true
channelShowBtn!.widthAnchor.constraint(equalToConstant:39).isActive = true
位置和大小应该改变,但实际上没有改变。
答案 0 :(得分:2)
您可以从xib本身设置位置。
我在下面附加了图像,可以根据需要设置宽度,高度,前导,尾随,顶部和底部约束。
在这里您可以看到“添加新约束”选项,您可以根据需要放置按钮
设置高度限制出口:
@IBOutlet var heightConst: NSLayoutConstraint!
现在,在View中已按设备加载了设置的高度
if (UIDevice.current.screenType == .iPhones_5_5s_5c_SE){
heightConst.constant = 400
}else{
heightConst.constant = 200
}
在代码中添加UIDevice扩展(您也可以在此链接上找到此扩展:how to check screen size of iphone 4 and iphone 5 programmatically in swift):
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
}
}
}
答案 1 :(得分:1)
如果要根据设备增加高度比例,可以使用以下扩展名。
extension NSLayoutConstraint {
@IBInspectable var preciseConstant: CGFloat {
get {
return constant * UIScreen.main.scale
}
set {
//replace 567 with height of Device screen that you are used to initially design in story bored
constant = (newValue * UIScreen.main.bounds.size.height) / 567
//print(constant)
}
}
}
编写此扩展名后,您可以在特定约束的属性检查器中看到精确常数的选项。将相同的常数(30)放入precisionConstant。
运行该应用,您的组件高度将根据设备高度而增加