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?

Mike V.
quelle

Antworten:

490

Setzen Sie die Eigenschaft clipsToBoundsauf true

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

Allen
quelle
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
Tapas Pal
quelle
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
}
Honig
quelle
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?

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

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

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

iAmita Singh
quelle
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

BharathRao
quelle