with radius corner ios colors uibutton storyboard

ios - radius - Cambiar UIButton BorderColor en Storyboard



view border radius swift (7)

Configuré CornerRadius y BorderWidth para el botón UI en los atributos de tiempo de ejecución definidos por el usuario. Sin agregar layer.borderColor funciona bien y muestra el borde en color negro. Pero cuando agregar layer.borderColor no funciona (no muestra borde).


¡Hay una manera mucho mejor de hacer esto! Deberías usar @IBInspectable. Echa un vistazo a la entrada del blog de Mike Woelmer aquí: https://spin.atomicobject.com/2017/07/18/swift-interface-builder/

¡Realmente agrega la función a IB en Xcode! Algunas de las capturas de pantalla en otras respuestas hacen que parezca que los campos existen en IB, pero al menos en Xcode 9 no. Pero siguiendo su publicación los agregaré.


En el caso de Swift, la función no funciona. Necesitará una propiedad calculada para lograr el resultado deseado:

extension CALayer { var borderColorFromUIColor: UIColor { get { return UIColor(CGColor: self.borderColor!) } set { self.borderColor = newValue.CGColor } } }


Esto funciona para mi.

Swift 3, Xcode 8.3

Extensión 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) } }

}


La explicación, tal vez perderse en algunas de las otras respuestas aquí:

La razón por la que no se establece esta propiedad es que layer.borderColor necesita un valor con el tipo CGColor .

¡Pero solo los tipos UIColor se pueden configurar a través de los atributos de tiempo de ejecución definidos por el usuario de Interface Builder!

Por lo tanto, debe establecer un UIColor en una propiedad proxy a través de Interface Builder, luego interceptar esa llamada para establecer el CGColor equivalente en la propiedad layer.borderColor .

Esto se puede lograr creando una Categoría en CALayer, configurando la Ruta de la Clave a una nueva "propiedad" borderColorFromUIColor ( borderColorFromUIColor ), y en la categoría anulando el setter correspondiente ( setBorderColorFromUIColor: .


Tengo Respuesta Cambiar layer.borderColor a layer.borderColorFromUIColor

y agregue el código en el archivo .m

#import <QuartzCore/QuartzCore.h> @implementation CALayer (Additions) - (void)setBorderColorFromUIColor:(UIColor *)color { self.borderColor = color.CGColor; } @end

Marque las propiedades en el Inspector de atributos


Para 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 } } }


Swift 4, Xcode 9.2 : utilice IBDesignable e IBInspectable para crear controles personalizados y previsualizar en vivo el diseño en Interface Builder.

Aquí hay un código de muestra en Swift, colóquelo justo debajo del UIKit en ViewController.swift:

@IBDesignable extension UIButton { @IBInspectable var borderWidth: CGFloat { set { layer.borderWidth = newValue } get { return layer.borderWidth } } @IBInspectable var cornerRadius: CGFloat { set { layer.cornerRadius = newValue } get { return layer.cornerRadius } } @IBInspectable var borderColor: UIColor? { set { guard let uiColor = newValue else { return } layer.borderColor = uiColor.cgColor } get { guard let color = layer.borderColor else { return nil } return UIColor(cgColor: color) } } }

Si va a los Atributos inspeccionables de la vista, debe encontrar estas propiedades visualmente, edite las propiedades:

Los cambios también se reflejan en los atributos de tiempo de ejecución definidos por el usuario:

Corre en tiempo de construcción y ¡Voila! verá su botón redondeado claro con borde.