UIlabel layer.cornerRadius funktioniert in iOS 7.1 nicht


189

Ich betrachte derzeit ein UILabel mit der Eigenschaft addMessageLabel.layer.cornerRadius = 5.0f;Auf einem Gerät mit installiertem iOS 7.0 hat es abgerundete Ecken. Auf einem Gerät mit installiertem iOS 7.1 sind keine Ecken abgerundet.

Ist das nur ein Fehler mit iOS 7.1?

Antworten:


490

Setzen Sie die Eigenschaft clipsToBoundsauf true

addMessageLabel.clipsToBounds = true

3
Ich bin mir nicht sicher, warum Sie das nicht auf iOS 7 tun mussten, sondern auf iOS 7.1, aber es hat funktioniert! Vielen Dank
Mike V

11
Nein, nicht seltsam ... nur "Fortschritt" ... <humf>, es scheint, dass UILabels clipsToBounds jetzt wie die meisten anderen UIViews standardmäßig FALSE ist. Apple versucht wahrscheinlich, die Dinge konsistenter zu machen. Ich hatte auch nur das gleiche Problem.
Leslie Godwin

2
@ChristopherKing Ich konnte keine Dokumentation dazu finden, aber das hat auch in meinem Szenario funktioniert, Überraschung, denke ich :)
Raheel Sadiq

3
Vielen Dank an die Entwickler für Stack Overflow.
Scrrr

1
Danke Kumpel Du hast meine Zeit gespart (Y).
Akhtar

66

Ich denke, der beste Weg, um den Eckenradius einzustellen, ist:

Geben Sie hier die Bildbeschreibung ein

und stellen Sie sicher, dass die Option "Clip-Unteransichten" aktiviert ist:

Geben Sie hier die Bildbeschreibung ein

Das Aktivieren von "Clip-Unteransichten" entspricht dem Code addMessageLabel.clipsToBounds = YES;.


Auf jeden Fall der einfachste Weg
Mário Carvalho

Dies ist der beste Weg. Getestet mit ios 8+ und xcode 7.2.
Lifeisfoo

Wenn jemand hierher gekommen ist, um danach zu suchen, und es nicht funktioniert hat: Wenn Sie die Eigenschaft "CornerRadius" setzen, funktioniert es unter iOS10 +. Unter iOS9 muss es "layer.cornerRadius" sein
Nathan Barreto

clipToBounds kann auch in den benutzerdefinierten Laufzeitattributen festgelegt werden (wie beim layer.cornerRadius): Es sollte der Schlüssel sein. Pfad: clipsToBounds, Typ: Boolean, Wert: true
Chuy47

24

Probieren Sie Folgendes aus:

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

//or
[addMessageLabel setClipsToBounds:YES];

Schnell

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

//or
addMessageLable.layer.clipsToBounds = true

5

Mein Problem war etwas anders.

Während ich es tat btn.clipsToBounds = true

Ich habe nicht festgelegt:

btn.layer.cornerRadius = 20

Weil ich verschiedene Bildschirmgrößen hatte. Stattdessen folgte ich dieser Antwort und tat:

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

Es hat nicht funktioniert, weil ich vergessen habe hinzuzufügen super.layoutSubviews(). Der richtige Code lautet:

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

Vielen Dank. Nur diese Antwort hat bei mir funktioniert. Swift 3, Xcode 8.3.3
Skywalker

3

Ich habe das folgende ausprobiert und eine erfolgreiche Ausgabe erhalten.

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

Gibt es noch etwas, das dich aufhält?


Vor iOS 7.1 clipsToBoundswurde standardmäßig YESdie Zeile verwendet, sodass die Zeile [yourlabelname setClipsToBounds:YES];nicht in meinem ursprünglichen Code enthalten war.
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];

Stellen Sie sicher, dass Sie mit dem entsprechenden Bereitstellungsziel prüfen.


0

Fügen Sie den folgenden Code als Erweiterung für UIView hinzu

//// 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
        }
    }
}

Danach erhalten Sie die folgenden Attribute im Interface Builder selbst.!

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.