更改故事板中的UIButton BorderColor
我在用户定义的运行时属性中为UIbutton设置了CornerRadius和BorderWidth。 没有添加layer.borderColor它的作品,以黑色显示边框。 但是当添加layer.borderColor不起作用(不显示边框)。
提前致谢。
对于Swift:
Swift 3:
extension 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 = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(cgColor: layer.borderColor!) } set { layer.borderColor = newValue?.cgColor } } }
Swift 2.2:
extension 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 = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(CGColor: layer.borderColor!) } set { layer.borderColor = newValue?.CGColor } } }
我得到答案更改layer.borderColor layer.borderColorFromUIColor
并在.m文件中添加代码
#import <QuartzCore/QuartzCore.h> @implementation CALayer (Additions) - (void)setBorderColorFromUIColor:(UIColor *)color { self.borderColor = color.CGColor; } @end
在属性检查器中勾选属性
这个解释,也许在这里的一些其他的答案中丢失了:
这个属性没有被设置的原因是layer.borderColor
需要一个types为CGColor
的值。
但是只有UIColor
types可以通过Interface Builder的用户定义的运行时属性来设置!
因此,您必须通过Interface Builder将UIColor设置为代理属性,然后拦截该调用以将等同的CGColor设置为layer.borderColor
属性。
这可以通过在CALayer上创build一个类别,将关键path设置为一个独特的新属性( borderColorFromUIColor
)以及覆盖相应设置器( setBorderColorFromUIColor:
的类别来实现。
在Swift的情况下,function不起作用。 您将需要一个计算属性来实现所需的结果:
extension CALayer { var borderColorFromUIColor: UIColor { get { return UIColor(CGColor: self.borderColor!) } set { self.borderColor = newValue.CGColor } } }
这对我有用。 Swift 3,xCode 8.3
CALayer扩展:
extension CALayer { var borderWidthIB: NSNumber { get { return NSNumber(value: Float(borderWidth)) } set { borderWidth = CGFloat(newValue.floatValue) } } var borderColorIB: UIColor? { get { return borderColor != nil ? UIColor(cgColor: borderColor!) : nil } set { borderColor = newValue?.cgColor } } var cornerRadiusIB: NSNumber { get { return NSNumber(value: Float(cornerRadius)) } set { cornerRadius = CGFloat(newValue.floatValue) } }
}