UIlabel layer.cornerRadius nie działa w iOS 7.1


190

Obecnie patrzę na UILabel z właściwością addMessageLabel.layer.cornerRadius = 5.0f;Na urządzeniu z zainstalowanym iOS 7.0 ma zaokrąglone rogi. Na urządzeniu z zainstalowanym systemem iOS 7.1 nie ma zaokrąglonych rogów.

Czy to tylko błąd w iOS 7.1?

Odpowiedzi:


491

Ustaw właściwość clipsToBoundsna true

addMessageLabel.clipsToBounds = true

3
Nie jestem pewien, dlaczego nie musiałeś tego robić na iOS 7, ale na iOS 7.1, ale zadziałało! Dzięki
Mike V

11
Nie, nie dziwne ... po prostu „postęp” ... <humf>, wygląda na to, że clipsToBounds UILabel domyślnie ma wartość FAŁSZ jak większość innych UIViews. Apple prawdopodobnie próbuje uczynić rzeczy bardziej spójnymi. Ja też miałem ten sam problem.
Leslie Godwin

2
@ChristopherKing nie mogłem znaleźć dokumentacji na ten temat, ale zadziałało to również w moim scenariuszu, chyba zaskakujące :)
Raheel Sadiq

3
Dziękujemy deweloperom za przepełnienie stosu.
scrrr

1
Dzięki kolego Uratowałeś mi czas (Y).
Akhtar

66

Myślę, że najlepszym sposobem ustawienia promienia narożnika jest:

wprowadź opis zdjęcia tutaj

i upewnij się, że „Klipy podrzędne” są zaznaczone:

wprowadź opis zdjęcia tutaj

Sprawdzanie „Clip Subviews” jest równe kodowi addMessageLabel.clipsToBounds = YES;.


Zdecydowanie najprostszy sposób
Mário Carvalho,

To najlepszy sposób. Testowane z iOS 8+ i Xcode 7.2.
lifeisfoo,

Jeśli ktoś tu przyszedł i szukał tego, ale to nie działało: jeśli umieścisz właściwość „cornerRadius”, będzie działać na iOS10 +. Na iOS9 musi to być „layer.cornerRadius”
Nathan Barreto

clipToBounds można również ustawić w zdefiniowanych przez użytkownika atrybutach środowiska wykonawczego (tak samo jak w pliku layer.cornerRadius): powinien to być klucz Ścieżka: clipsToBounds, typ: Boolean, wartość: true
Chuy47

24

Wypróbuj następujące

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

//or
[addMessageLabel setClipsToBounds:YES];

Szybki

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

//or
addMessageLable.layer.clipsToBounds = true

5

Mój problem był nieco inny.

A ja nie zrobić btn.clipsToBounds = true

Nie chciałem robić:

btn.layer.cornerRadius = 20

Ponieważ miałem różne rozmiary ekranu. Zamiast tego podążyłem za odpowiedzią i zrobiłem:

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

To nie działało, bo zapomniałem dodać super.layoutSubviews(). Prawidłowy kod to:

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

Dzięki tona .. Tylko ta odpowiedź działała dla mnie. Swift 3, Xcode 8.3.3
Skywalker

3

Próbowałem poniżej i mam udane wyjście.

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

Czy jest coś jeszcze, co Cię powstrzymuje?


Przed iOS 7.1 clipsToBoundsbył domyślnie YESustawiony na , więc linii [yourlabelname setClipsToBounds:YES];nie było w moim oryginalnym kodzie.
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];

Upewnij się, że sprawdzasz z odpowiednim celem wdrożenia.


0

Dodaj następujący kod jako rozszerzenie dla 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
        }
    }
}

Następnie otrzymasz następujące atrybuty w samym kreatorze interfejsów.!

wprowadź opis zdjęcia tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.