Ios 通过约束更新图层后,在@IBDesignable中调用@IBInspectable集合
我想为UIView创建一个@IBInspectable,使UIView成为一个圆:Ios 通过约束更新图层后,在@IBDesignable中调用@IBInspectable集合,ios,swift,ibdesignable,ibinspectable,Ios,Swift,Ibdesignable,Ibinspectable,我想为UIView创建一个@IBInspectable,使UIView成为一个圆: @IBInspectable var circleBorder: Bool { set { layer.cornerRadius = layer.frame.size.width / 2 } get { return layer.cornerRadius > 0 ? true : false } } 问题是在约束修改其值之前调用了my@IBIn
@IBInspectable var circleBorder: Bool {
set {
layer.cornerRadius = layer.frame.size.width / 2
}
get {
return layer.cornerRadius > 0 ? true : false
}
}
问题是在约束修改其值之前调用了my@IBInspectable,并且设置了错误的转弯半径。
有可能在这里获得约束后的层大小吗?我认为没有,但有一个更好的方法-暴露角半径 这样,开发人员就可以按照自己的顺序进行操作。在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的大小是动态的,并且约束条件改变了,那么拐角半径也必须改变。我明白你的意思。您可能无法100%完成您想要的任务在我看来,这可以归结为IB是一个设计时工具,而完美的圆frame.size.width/2是一个运行时计算。我也遇到了同样的情况——我想根据方向将一组控件从底部向右移动。IB无法处理它,因为无论方向如何,iPad都有相同的尺寸等级。我最终完全抛弃了IB,因为它很容易在代码中完成!