在通过约束更新图层后,在@IBDesignable中调用@IBInspectable集

时间:2017-05-05 11:32:27

标签: 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
    }
}

问题是我的@IBInspectable在约束修改其值并且设置了错误的cornerRadius之前被调用。 是否有可能在约束后得到图层大小?

1 个答案:

答案 0 :(得分:1)

我认为没有,但有更好的方式 - 揭露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
    }
}