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.