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?

Mike V
fuente

Respuestas:

491

Establecer la propiedad clipsToBoundsen verdadero

addMessageLabel.clipsToBounds = true
Raheel Sadiq
fuente
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;.

Allen
fuente
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
Tapas Pal
fuente
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
}
Miel
fuente
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?

Mano Rajendran
fuente
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

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

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

iAmita Singh
fuente
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í

BharathRao
fuente