Xcode 9 borderColor不适用于用户定义的运行时属性

时间:2017-08-11 08:06:33

标签: ios calayer ios11 xcode9-beta xcode9

我正在使用此CALayer扩展程序:

var borderUIColor: UIColor {
    set {
        self.borderColor = newValue.cgColor
    }

    get {
        return UIColor(cgColor: self.borderColor!)
    }
}

我认为可能是因为此扩展程序,我在页面底部的“提交”按钮的borderColor不会变为白色(我希望如此):

enter image description here

但不,我联系了IBOutlet,并尝试直接设置这样的颜色:

submitButton.layer.borderColor = UIColor.white.cgColor

viewDidLoadviewWillAppearviewDidAppear中完成了,因为我知道在上一次大更新(iOS 10)中,帧渲染从根本上改变了(1000x1000帧的东西)并且可能现在有一些类似的改动。但是没有运气。

我在iOS 9,10和11中测试过。它不是关于操作系统,而是关于环境。我正在使用Xcode 9 Beta 5.任何想法如何解决?

5 个答案:

答案 0 :(得分:9)

尝试用@objc装饰var声明,如下所示:

@objc var borderUIColor: UIColor {
...
}

应该解决您的问题

答案 1 :(得分:4)

清除项目,删除了派生数据,代码现在可以使用viewDidLoadviewWillAppearviewDidAppear

问题显然在于用户定义的运行时属性。 Xcode 9不再接受此处的扩展变量。或者,至少是Beta 5版本。

编辑:的确,添加@objc解决了这个问题。

答案 2 :(得分:0)

刚遇到同样的问题,又得到了另一个解决方案:我刚刚让我的课程符合KVC标准。

示例,一步一步:

  • 自定义类是XTCMenuItem,具有属性propIdentifier。
  • 对于符合KVC标准,本课程有两种方法:
    • 覆盖func值(forKey key:String) - >任何?
    • 覆盖func setValue(_ value: 任何?,forKey键:字符串)
  • 在Identity Inspector中,我设置了自定义类 到" XTCMenuItem",并添加用户定义的运行时属性 " propIdentifier"使用类型"字符串"和字符串值。

答案 3 :(得分:0)

如果您不想创建IBOutlet并只使用RunTime属性,那么您可以使用IBDesignable并设置前缀@objc它将解决您的问题。

@objc @IBInspectable var borderColor: UIColor {

   get {
      return UIColor(cgColor: self.layer.borderColor!)
   }
   set {
      self.layer.borderColor = newValue.cgColor
   }
}

答案 4 :(得分:-1)

使用@IBInspectable属性。 例如:

@IBInspectable var borderColor = UIColor.green