Saltar al contenido

¿Cómo puedo hacer que un botón tenga un borde redondeado en Swift?

Solución:

Usar button.layer.cornerRadius, button.layer.borderColor y button.layer.borderWidth. Tenga en cuenta que borderColor requiere un CGColor, por lo que podría decir (Swift 3/4):

button.backgroundColor = .clear
button.layer.cornerRadius = 5
button.layer.borderWidth = 1
button.layer.borderColor = UIColor.black.cgColor

Para hacer este trabajo en el guión gráfico (Interface Builder Inspector)

Con la ayuda de IBDesignable, podemos agregar más opciones a Interface Builder Inspector para UIButton y modificarlos en el guión gráfico. Primero, agregue el siguiente código a su proyecto.

@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)
        }
    }
}

Luego, simplemente configure los atributos de los botones en el guión gráfico.

ingrese la descripción de la imagen aquí

He creado una subcacasa de UIButton simple que usa el tintColor por su texto y colores de borde y cuando se resalta cambia su fondo a la tintColor.

class BorderedButton: UIButton {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    layer.borderWidth = 1.0
    layer.borderColor = tintColor.CGColor
    layer.cornerRadius = 5.0
    clipsToBounds = true
    contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
    setTitleColor(tintColor, forState: .Normal)
    setTitleColor(UIColor.whiteColor(), forState: .Highlighted)
    setBackgroundImage(UIImage(color: tintColor), forState: .Highlighted)
}
}

Esto hace uso de una extensión UIImage que crea una imagen a partir de un color, encontré ese código aquí: https://stackoverflow.com/a/33675160

Funciona mejor cuando se configura para escribir Personalizado en el generador de interfaces, ya que el tipo de sistema predeterminado modifica ligeramente los colores cuando el botón está resaltado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *