UIlabel layer.cornerRadius no funciona en iOS 7.1


190

Actualmente estoy mirando un UILabel con la propiedad addMessageLabel.layer.cornerRadius = 5.0f;En un dispositivo con iOS 7.0 instalado, tiene esquinas redondeadas. En un dispositivo con iOS 7.1 instalado, no tiene esquinas redondeadas.

¿Es esto solo un error con iOS 7.1?

Respuestas:


491

Establecer la propiedad clipsToBoundsen verdadero

addMessageLabel.clipsToBounds = true

3
No estoy seguro de por qué no tenía que hacer eso en iOS 7, sino iOS 7.1, ¡pero funcionó! Gracias
Mike V

11
No, no es extraño ... solo "progreso" ... <humf>, parece que los clipsToBounds de UILabel ahora están predeterminados en FALSO como la mayoría de las otras UIViews. Apple probablemente esté tratando de hacer las cosas más consistentes. Yo también tuve el mismo problema.
Leslie Godwin

2
@ChristopherKing No pude encontrar documentación sobre esto, pero esto también funcionó en mi escenario, sorpresa, supongo :)
Raheel Sadiq

3
Agradezca a los desarrolladores por Stack Overflow.
scrrr

1
Gracias amigo. Me salvaste el tiempo (S).
Akhtar

66

Creo que la mejor manera de establecer el radio de la esquina es:

ingrese la descripción de la imagen aquí

y asegúrese de que la casilla "Subvistas de clip" esté marcada:

ingrese la descripción de la imagen aquí

Marcar "Subvistas de clip" es igual al código addMessageLabel.clipsToBounds = YES;.


Definitivamente, la forma más fácil
Mário Carvalho

Esta es la mejor manera. Probado con ios 8+ y xcode 7.2.
lifeisfoo

Si alguien vino aquí buscando esto y no funcionó: si coloca la propiedad "cornerRadius", funcionará en iOS10 +. En iOS9 tiene que ser "layer.cornerRadius"
Nathan Barreto

clipToBounds también se puede establecer en los Atributos de tiempo de ejecución definidos por el usuario (lo mismo que layer.cornerRadius): debe ser clave Ruta: clipsToBounds, tipo: Boolean, valor: verdadero
Chuy47

24

Intenta lo siguiente,

[[addMessageLabel layer] setCornerRadius:5.0f];
[[addMessageLabel layer] setMasksToBounds:YES];

//or
[addMessageLabel setClipsToBounds:YES];

Rápido

addMessageLable.layer.cornerRadius = 5.0
addMessageLable.layer.masksToBounds = true

//or
addMessageLable.layer.clipsToBounds = true

5

Mi problema fue un poco diferente.

Mientras lo hice hacer btn.clipsToBounds = true

No estaba configurando hacer:

btn.layer.cornerRadius = 20

Porque tenía diferentes tamaños de pantalla. En cambio, seguí esta respuesta e hice:

override func layoutSubviews() {
    seeMoreButton.layer.cornerRadius = seeMoreButton.bounds.size.height / 2
}

No estaba funcionando porque olvidé agregar super.layoutSubviews(). El código correcto es:

override func layoutSubviews() {
    super.layoutSubviews()
    seeMoreButton.layer.cornerRadius = seeMoreButton.bounds.size.height / 2
}

Muchas gracias. Solo esta respuesta funcionó para mí. Swift 3, Xcode 8.3.3
Skywalker

3

He probado el siguiente y obtuve un resultado exitoso.

yourlabelname.layer.cornerRadius = 10.0f;
[yourlabelname setClipsToBounds:YES];

¿Hay algo más que te esté deteniendo?


Antes de iOS 7.1, clipsToBoundsestaba predeterminado YES, por lo que la línea [yourlabelname setClipsToBounds:YES];no estaba en mi código original.
Mike V

0
 //works perfect in Swift 2.0 for a circular or round image          


@IBOutlet var theImage: UIImageView!
        override func viewDidLoad() {
            super.viewDidLoad()
    //Make sure the width and height are same
            self.theImage.layer.cornerRadius = self.theImage.frame.size.width / 2
            self.theImage.layer.borderWidth = 2.0
            self.theImage.layer.borderColor = UIColor.whiteColor().CGColor
            self.theImage.clipsToBounds = true

        }

0
yourlabelname.layer.cornerRadius = yourlabelname.frame.size.width/2;
[yourlabelname setClipsToBounds:YES];

Asegúrese de verificar con el objetivo de implementación adecuado.


0

Agregue el siguiente código como extensión para UIView

//// Story board Extra Feature for create border radius, border width and border Color
extension UIView {
    /// corner radius
    @IBInspectable var borderColor: UIColor? {
        set {
            layer.borderColor = newValue!.cgColor
        }
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            } else {
                return nil
            }
        }
    }
    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }
    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
}

Después de eso, obtendrá los siguientes atributos en el generador de interfaces.

ingrese la descripción de la imagen aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.