为什么标记为@IBInspectable 的属性不起作用?

Why properties tagged @IBInspectable is not working?

我按照 tutorial 此处创建了一个可检查和可设计的视图。我只想在 UIView.

中添加边框颜色、边框宽度和圆形边框功能

我已经成功显示属性了。但不管我在故事板上设置了什么,如果它们不存在,结果仍然是一样的。没有边框,即使我将边框设置为宽度为 2 且颜色为黑色。它没有同时显示在故事板上和 运行 时间。我已经将边框设置为 2 宽度,但是在 运行 时,我在 didViewLoad 打印边框宽度值,结果为 0。可能是什么错误?

@IBDesignable extension view: UIView {

    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidth: CGFloat {
        get {
            return layer.borderWidth;
        }
        set {
            layer.borderWidth = borderWidth;
        }
    }

    @IBInspectable var borderColor: UIColor? {
        get {
            return UIColor(CGColor: layer.borderColor!);
        }
        set {
            layer.borderColor = borderColor?.CGColor
        }
    }

}

这也行不通:

@IBDesignable class BOView: UIView {

    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderWidth: CGFloat {
        get {
            return layer.borderWidth;
        }
        set {
            layer.borderWidth = borderWidth;
        }
    }

    @IBInspectable var borderColor: UIColor? {
        get {
            return UIColor(CGColor: layer.borderColor!);
        }
        set {
            layer.borderColor = borderColor?.CGColor
        }
    }

}

尝试使用新值而不是实际值。

例如,

@IBInspectable var borderWidth: CGFloat {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
}

Chen,我确实更喜欢你这样做的方式,但也请注意,你尝试做的事情可以直接从情节提要中进行,而无需使用 IBDesignable。您可以在用户定义的运行时属性中设置图层属性。