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

Ios 为什么标记为@IBInspectable的属性不起作用?,ios,swift,ibdesignable,ibinspectable,Ios,Swift,Ibdesignable,Ibinspectable,我按照此处创建了一个可检查和可设计的视图。我只想在UIView中添加边框颜色、边框宽度和圆角边框功能 我已经成功地展示了这些属性。但不管我在故事板上设置了什么,结果仍然是,如果他们不在那里。没有边框,即使我已经将边框的宽度设置为2,颜色设置为黑色。它不会同时在故事板和运行时显示。我已将边框宽度设置为2,但在运行时,我在didViewLoad打印边框宽度值,结果为0。可能有什么问题 @IBDesignable extension view: UIView { @IBInspectable

我按照此处创建了一个可检查和可设计的视图。我只想在
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
        }
    }

}

尝试使用newValue而不是实际值

比如说,

@IBInspectable var borderWidth: CGFloat {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
}
Chen,我确实更喜欢你这样做,但也要注意,你试图做的事情可以直接从故事板上完成,而不需要使用IBDesignable。可以在用户定义的运行时属性中设置图层特性


尝试使用newValue而不是实际值

比如说,

@IBInspectable var borderWidth: CGFloat {
    get {
        return layer.borderWidth
    }
    set {
        layer.borderWidth = newValue
    }
}
Chen,我确实更喜欢你这样做,但也要注意,你试图做的事情可以直接从故事板上完成,而不需要使用IBDesignable。可以在用户定义的运行时属性中设置图层特性


您在发布之前检查过这个答案吗?有用吗?就是这样!是的,我需要使用
newValue
而不是变量名。谢谢但是IBDesignable仍然不起作用。。。但这是一个巨大的飞跃!!等等,IB可设计现在可以工作了!!我不知道为什么!也许我需要关闭并重新打开Xcode。谢谢很高兴。你的分机能用吗?它可能真的很方便。@carienvanzil是的,是的!现在有一个全新的世界和各种可能性展现在我面前,哈哈。过去我必须实现控制器并运行它,只是为了看看边界是什么样子。我认为这个可检查和可设计的东西非常复杂,所以直到现在我才去了解它。哦,我离真相实在太远了,哈哈。你在发布之前检查过这个答案吗?有用吗?就是这样!是的,我需要使用
newValue
而不是变量名。谢谢但是IBDesignable仍然不起作用。。。但这是一个巨大的飞跃!!等等,IB可设计现在可以工作了!!我不知道为什么!也许我需要关闭并重新打开Xcode。谢谢很高兴。你的分机能用吗?它可能真的很方便。@carienvanzil是的,是的!现在有一个全新的世界和各种可能性展现在我面前,哈哈。过去我必须实现控制器并运行它,只是为了看看边界是什么样子。我认为这个可检查和可设计的东西非常复杂,所以直到现在我才去了解它。哦,我真是太离谱了,哈哈。你打开菜单了吗➜ <代码>自动刷新视图在IB中打开?@holex该选项已打开。您是否已打开菜单
编辑器
➜ <代码>自动刷新视图在IB?@holex中打开,该选项已打开。