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

Posted

技术标签:

【中文标题】为啥标记为@IBInspectable 的属性不起作用?【英文标题】:Why properties tagged @IBInspectable is not working?为什么标记为@IBInspectable 的属性不起作用? 【发布时间】:2016-10-18 08:33:45 【问题描述】:

我在这里按照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
        
    


【问题讨论】:

你在 IB 中打开菜单 EditorAutomatically Refresh Views 了吗? @holex 该选项已打开。 【参考方案1】:

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

例如,

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

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

【讨论】:

你在发布之前检查过这个答案吗?有用吗? 哦哦哦原来是这样!是的,我需要使用newValue 而不是变量名。谢谢!!!!但是 IBDesignable 仍然不起作用......但这是一个很大的飞跃! 等等,IBDesignable 现在可以工作了!!我不知道为什么!也许我需要关闭并重新打开 Xcode。谢谢! 很高兴。你的扩展有效吗?它可能真的很方便。 @CarienvanZyl 是的!现在有一个全新的世界和可能性在我面前打开了哈哈。我必须实现控制器并运行它的日子已经一去不复返了,只是为了看看边框是什么样子的。我认为这个可检查和可设计的东西非常复杂,所以直到现在我才去了解它。哦,我离真相太远了,哈哈。

以上是关于为啥标记为@IBInspectable 的属性不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

具有 IBInspectable 颜色属性的子类 - 无法覆盖

配置 @IBInspectable 属性检查器控件

标记平方数的代码不起作用,这是为啥呢?

具有IBInspectable颜色属性的子类 - 无法覆盖

为啥打字稿将联合中的属性标记为不存在?

IBInspectable 和协议