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?

Réponses:


491

Définissez la propriété clipsToBoundssur true

addMessageLabel.clipsToBounds = true

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;.


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

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
}

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?


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

        }

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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.