[英]Change the value of constraint for only iPhone 4 in IB
如何仅在一个设备上更改约束的值。 例如,除iPhone 4外,我想为所有iPhone显示一个高度为400px的按钮,而在iPhone 4上我该按钮的显示值为300px?
最好的解决方案是创建一个继承自NSLayoutConstraint类的新类并添加以下属性,这样您就可以更改常量,乘数,还可以在接口构建器中停用每个设备的约束以及所有这些约束:
import UIKit
/**
* This class used to modify easly the constraint for each device iPhone 4, iPhone 5, iPhone 6 or iPhone 6 Plus
* You can modify the constant, the multiplier and also active / deactive the constraint for each device
* You should modify this properties only in the storyboard
*/
@IBDesignable
public class LayoutConstraint: NSLayoutConstraint {
// MARK: 📱3¨5
/**
* The constant for device with 3.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱3¨5_const: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 480 {
constant = 📱3¨5_const
}
}
}
/**
* The multiplier for device with 3.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱3¨5_multip: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 480 {
self.setValue(📱3¨5_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 3.5 insh size
* The default value is true.
*/
@IBInspectable
public var 📱3¨5_active: Bool = true {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 480 {
active = 📱3¨5_active
}
}
}
// MARK: 📱4¨0
/**
* The constant for device with 4.0 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨0_const: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 568 {
constant = 📱4¨0_const
}
}
}
/**
* The multiplier for device with 4.0 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨0_multip: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 568 {
self.setValue(📱4¨0_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 4.0 insh size
* The default value is true.
*/
@IBInspectable
public var 📱4¨0_active: Bool = true {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 568 {
active = 📱4¨0_active
}
}
}
// MARK: 📱4¨7
/**
* The constant for device with 4.7 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨7_const: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 667 {
constant = 📱4¨7_const
}
}
}
/**
* The multiplier for device with 4.7 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨7_multip: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 667 {
self.setValue(📱4¨7_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 4.7 insh size
* The default value is true.
*/
@IBInspectable
public var 📱4¨7_active: Bool = true {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 667 {
active = 📱4¨7_active
}
}
}
// MARK: 📱5¨5
/**
* The constant for device with 5.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱5¨5_const: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 736 {
constant = 📱5¨5_const
}
}
}
/**
* The multiplier for device with 5.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱5¨5_multip: CGFloat = 0 {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 736 {
self.setValue(📱5¨5_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active / deactive constraint for device with 5.5 insh size
* The default value is true.
*/
@IBInspectable
public var 📱5¨5_active: Bool = true {
didSet {
if CGRectGetMaxY(UIScreen.mainScreen().bounds) == 736 {
active = 📱5¨5_active
}
}
}
}
您可以使用插座作为约束,并根据运行的设备更改其值。即,如果iphone4则为300px,否则为400px(使用插座的“ constant ”属性)
您可以选择该按钮的高度限制出口。 然后您可以检测设备是否为iphone 4,然后可以更改其约束的插座constant
,例如
self.heightConstraint.constant = 300;
对于约束的连接出口,只需ctrl + drag from that constraint to class
您可以通过获取屏幕尺寸来检测设备。
if ([ [ UIScreen mainScreen ] bounds ].size.height == 480.00) {
NSLog(@"this is iphn 4");
self.heightConstraint.constant = 300;
}
希望这会有所帮助:)
首先创建按钮高度约束的对象(btnConstHeight)
if ([ [ UIScreen mainScreen ] bounds ].size.height == 480.00) {
self.btnConstHeight.constant = 300;
}
else{
self.btnConstHeight.constant = 400;
}
@Hamza的答案的Swift 4版本
import Foundation
import UIKit
/**
* This class used to modify easly the constraint for each device iPhone 4, iPhone 5, iPhone 6 or iPhone 6 Plus
* You can modify the constant, the multiplier and also active / deactive the constraint for each device
* You should modify this properties only in the storyboard
*/
@IBDesignable
public class LayoutConstraint: NSLayoutConstraint {
// MARK: 📱3¨5
/**
* The constant for device with 3.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱3¨5_const: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 480 {
constant = 📱3¨5_const
}
}
}
/**
* The multiplier for device with 3.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱3¨5_multip: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 480 {
self.setValue(📱3¨5_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 3.5 insh size
* The default value is true.
*/
@IBInspectable
public var 📱3¨5_active: Bool = true {
didSet {
if UIScreen.main.bounds.maxY == 480 {
isActive = 📱3¨5_active
}
}
}
// MARK: 📱4¨0
/**
* The constant for device with 4.0 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨0_const: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 568 {
constant = 📱4¨0_const
}
}
}
/**
* The multiplier for device with 4.0 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨0_multip: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 568 {
self.setValue(📱4¨0_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 4.0 insh size
* The default value is true.
*/
@IBInspectable
public var 📱4¨0_active: Bool = true {
didSet {
if UIScreen.main.bounds.maxY == 568 {
isActive = 📱4¨0_active
}
}
}
// MARK: 📱4¨7
/**
* The constant for device with 4.7 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨7_const: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 667 {
constant = 📱4¨7_const
}
}
}
/**
* The multiplier for device with 4.7 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱4¨7_multip: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 667 {
self.setValue(📱4¨7_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active deative constraint for device with 4.7 insh size
* The default value is true.
*/
@IBInspectable
public var 📱4¨7_active: Bool = true {
didSet {
if UIScreen.main.bounds.maxY == 667 {
isActive = 📱4¨7_active
}
}
}
// MARK: 📱5¨5
/**
* The constant for device with 5.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱5¨5_const: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 736 {
constant = 📱5¨5_const
}
}
}
/**
* The multiplier for device with 5.5 insh size
* The default value is the value of the constant of the constraint.
*/
@IBInspectable
public var 📱5¨5_multip: CGFloat = 0 {
didSet {
if UIScreen.main.bounds.maxY == 736 {
self.setValue(📱5¨5_multip, forKey: "multiplier")
}
}
}
/**
* The boolean to active / deactive constraint for device with 5.5 insh size
* The default value is true.
*/
@IBInspectable
public var 📱5¨5_active: Bool = true {
didSet {
if UIScreen.main.bounds.maxY == 736 {
isActive = 📱5¨5_active
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.