layer被constraints更新后调用@IBDesignable中的@IBInspectable set
Call @IBInspectable set in @IBDesignable after layer is updated by constraints
我想为 UIView 创建一个 @IBInspectable,使 UIView 成为一个圆:
@IBInspectable var circleBorder: Bool {
set {
layer.cornerRadius = layer.frame.size.width / 2
}
get {
return layer.cornerRadius > 0 ? true : false
}
}
问题是我的@IBInspectable 在约束修改其值之前被调用,并且设置了错误的 cornerRadius。
是否可以在这里得到约束后的图层大小?
我认为没有,但有更好的方法 - 公开 cornerRadius
。
这样开发人员可以按照自己的顺序做事。在 Bool
中公开事物意味着在 IB 中,开发人员需要 (1) 创建视图,(2) 添加约束,(3) 更新框架,然后 然后 (4) 设置Bool
。 (此外,在 Xcode 8 中,我猜测如果您在 IB 中更改设备 - 即使在获得正确的序列之后 - 事情可能无法正确更新。
除非您有特定的原因(我想不出来)将其设为 Bool
,这不仅无害,而且更可定制。
代码:
@IBInspectable public var cornerRadius:CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}
我想为 UIView 创建一个 @IBInspectable,使 UIView 成为一个圆:
@IBInspectable var circleBorder: Bool {
set {
layer.cornerRadius = layer.frame.size.width / 2
}
get {
return layer.cornerRadius > 0 ? true : false
}
}
问题是我的@IBInspectable 在约束修改其值之前被调用,并且设置了错误的 cornerRadius。 是否可以在这里得到约束后的图层大小?
我认为没有,但有更好的方法 - 公开 cornerRadius
。
这样开发人员可以按照自己的顺序做事。在 Bool
中公开事物意味着在 IB 中,开发人员需要 (1) 创建视图,(2) 添加约束,(3) 更新框架,然后 然后 (4) 设置Bool
。 (此外,在 Xcode 8 中,我猜测如果您在 IB 中更改设备 - 即使在获得正确的序列之后 - 事情可能无法正确更新。
除非您有特定的原因(我想不出来)将其设为 Bool
,这不仅无害,而且更可定制。
代码:
@IBInspectable public var cornerRadius:CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
layer.masksToBounds = newValue > 0
}
}