我正在尝试通过IB设置视图的图层属性。除了边框的颜色(属性layer.borderColor
)外,其他所有内容都有效:
我记得一年前遇到了这个问题,我最终通过编程解决了这个问题。尽管如此,我仍然可以通过编程来实现这一点,但我很好奇为什么layer.borderColor
属性从不通过接口构建器工作。我不想导入QuartzCore
,然后只因此而编写额外的代码行,这似乎有点过头了。
发布于 2013-02-22 03:16:24
这是可以做到的,但它不是一个内置的功能。这是因为User Defined Runtime Attributes面板中的Color
类型创建UIColor
,而layer.borderColor
持有CGColorRef
类型。不幸的是,没有办法在接口生成器中分配CGColorRef
类型。
但是,这可以通过代理属性来实现。有关此问题的可能解决方案,请参阅另一个问题的Peter DeWeese's answer。他的回答定义了一个允许通过Interface Builder设置代理颜色的类别。
发布于 2016-08-20 23:44:12
复制并粘贴此类:
import UIKit
@IBDesignable class BorderView : UIView {
@IBInspectable var borderColor: UIColor = .clear {
didSet {
layer.borderColor = borderColor.cgColor
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
}
}
}
现在,在Interface Builder中,转到Identity检查器并将视图设置为CustomView类。
在此之后,查看您的属性检查器:
不再需要纠结于用户定义的运行时属性。您所做的更改也将显示在画布上!
发布于 2015-05-19 03:43:32
我对移植Bartłomiej Semańczyk对Swift的回答有两点看法:
在视图控制器中为CALayer创建一个扩展:
import UIKit
extension CALayer {
func borderUIColor() -> UIColor? {
return borderColor != nil ? UIColor(CGColor: borderColor!) : nil
}
func setBorderUIColor(color: UIColor) {
borderColor = color.CGColor
}
}
https://stackoverflow.com/questions/14792238
复制相似问题