我正在使用此CALayer
扩展程序:
var borderUIColor: UIColor {
set {
self.borderColor = newValue.cgColor
}
get {
return UIColor(cgColor: self.borderColor!)
}
}
我认为可能是因为此扩展程序,我在页面底部的“提交”按钮的borderColor
不会变为白色(我希望如此):
但不,我联系了IBOutlet
,并尝试直接设置这样的颜色:
submitButton.layer.borderColor = UIColor.white.cgColor
在viewDidLoad
,viewWillAppear
和viewDidAppear
中完成了,因为我知道在上一次大更新(iOS 10)中,帧渲染从根本上改变了(1000x1000帧的东西)并且可能现在有一些类似的改动。但是没有运气。
我在iOS 9,10和11中测试过。它不是关于操作系统,而是关于环境。我正在使用Xcode 9 Beta 5.任何想法如何解决?
答案 0 :(得分:9)
尝试用@objc
装饰var声明,如下所示:
@objc var borderUIColor: UIColor {
...
}
应该解决您的问题
答案 1 :(得分:4)
清除项目,删除了派生数据,代码现在可以使用viewDidLoad
,viewWillAppear
或viewDidAppear
。
问题显然在于用户定义的运行时属性。 Xcode 9不再接受此处的扩展变量。或者,至少是Beta 5版本。
编辑:的确,添加@objc
解决了这个问题。
答案 2 :(得分:0)
刚遇到同样的问题,又得到了另一个解决方案:我刚刚让我的课程符合KVC标准。
示例,一步一步:
答案 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