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 之前被调用。是否可以在此处获得约束后的图层大小?

4

1 回答 1

1

我不认为有,但有更好的方法——expose cornerRadius

这样,开发人员可以按照自己的顺序做事。在 IB中公开事物Bool意味着开发人员需要 (1) 创建视图,(2) 添加约束,(3) 更新框架,然后(4) 设置Bool. (另外,在 Xcode 8 中,我猜如果您在 IB 中更改设备 - 即使在序列正确之后 - 事情可能无法正确更新。

除非你有一个特定的理由——我想不出——把它变成 a Bool,否则它不仅无害,而且更可定制。

编码:

@IBInspectable public var cornerRadius:CGFloat {
    get {
        return layer.cornerRadius
    }
    set {
        layer.cornerRadius = newValue
        layer.masksToBounds = newValue > 0
    }
}
于 2017-05-05T11:47:53.093 回答