UIlabel layer.cornerRadius ne fonctionne pas sous iOS 7.1

190

Je suis actuellement à la recherche d'un UILabel avec la propriété addMessageLabel.layer.cornerRadius = 5.0f;Sur un appareil avec iOS 7.0 installé, il a des coins arrondis. Sur un appareil avec iOS 7.1 installé, il n'a pas de coins arrondis.

Est-ce juste un bug avec iOS 7.1?

Mike V
la source

Réponses:

491

Définissez la propriété clipsToBoundssur true

addMessageLabel.clipsToBounds = true
Raheel Sadiq
la source
3
Je ne sais pas pourquoi vous n'avez pas eu à le faire sur iOS 7 mais sur iOS 7.1, mais cela a fonctionné! Merci
Mike V
11
Non, pas bizarre ... juste "progress" ... <humf>, il semble que les clipsToBounds d'UILabel soient maintenant FALSE comme la plupart des autres UIViews. Apple essaie probablement de rendre les choses plus cohérentes. Moi aussi, j'ai eu le même problème.
Leslie Godwin
2
@ChristopherKing je n'ai pas pu trouver de documentation à ce sujet, mais cela a fonctionné dans mon scénario aussi, surprise je suppose :)
Raheel Sadiq
3
Remerciez les développeurs pour Stack Overflow.
scrrr
1
Merci mon pote Tu as sauvé mon temps (Y).
Akhtar
66

Je pense que la meilleure façon de définir le rayon de coin est:

entrez la description de l'image ici

et assurez-vous que la case "Sous-vues du clip" est cochée:

entrez la description de l'image ici

La vérification de «Sous-vues de clip» équivaut au code addMessageLabel.clipsToBounds = YES;.

Allen
la source
Certainement, le moyen le plus simple
Mário Carvalho
C'est la meilleur façon. Testé avec ios 8+ et xcode 7.2.
lifeisfoo
Si quelqu'un est venu ici à la recherche de cela et que cela n'a pas fonctionné: si vous mettez la propriété "cornerRadius", cela fonctionnera sur iOS10 +. Sur iOS9, il doit s'agir de "layer.cornerRadius"
Nathan Barreto
clipToBounds peut également être défini dans les attributs d'exécution définis par l'utilisateur (le même que le layer.cornerRadius): il doit s'agir de la clé Path: clipsToBounds, type: Boolean, value: true
Chuy47
24

Essayez les solutions suivantes,

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

//or
[addMessageLabel setClipsToBounds:YES];

Rapide

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

//or
addMessageLable.layer.clipsToBounds = true
Tapas Pal
la source
5

Mon problème était un peu différent.

Alors que je l' ai fait btn.clipsToBounds = true

Je n'étais pas en train de faire:

btn.layer.cornerRadius = 20

Parce que j'avais des tailles d'écran différentes. Au lieu de cela, j'ai suivi cette réponse et j'ai fait:

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

Cela ne fonctionnait pas parce que j'ai oublié d'ajouter super.layoutSubviews(). Le code correct est:

override func layoutSubviews() {
    super.layoutSubviews()
    seeMoreButton.layer.cornerRadius = seeMoreButton.bounds.size.height / 2
}
Mon chéri
la source
Merci beaucoup. Seule cette réponse a fonctionné pour moi. Swift 3, Xcode 8.3.3
Skywalker
3

J'ai essayé celui ci-dessous et j'ai obtenu une sortie réussie.

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

Y a-t-il autre chose qui vous arrête?

Mano Rajendran
la source
Avant iOS 7.1, clipsToBoundsétait par défaut YES, donc la ligne [yourlabelname setClipsToBounds:YES];n'était pas dans mon code d'origine.
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
la source
0
yourlabelname.layer.cornerRadius = yourlabelname.frame.size.width/2;
[yourlabelname setClipsToBounds:YES];

Assurez-vous de vérifier avec la cible de déploiement appropriée.

iAmita Singh
la source
0

Ajoutez le code suivant comme extension pour 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
        }
    }
}

Après cela, vous obtiendrez les attributs suivants dans le générateur d'interface lui-même.!

entrez la description de l'image ici

BharathRao
la source