UIlabel layer.cornerRadius non funziona in iOS 7.1


190

Attualmente sto guardando un UILabel con la proprietà addMessageLabel.layer.cornerRadius = 5.0f;Su un dispositivo con iOS 7.0 installato, ha gli angoli arrotondati. Su un dispositivo con iOS 7.1 installato, non ha angoli arrotondati.

È solo un bug con iOS 7.1?

Risposte:


491

Impostare la proprietà clipsToBoundssu true

addMessageLabel.clipsToBounds = true

3
Non sono sicuro del motivo per cui non è stato necessario farlo su iOS 7 ma su iOS 7.1, ma ha funzionato! Grazie
Mike V

11
No, non strano ... solo "progresso" ... <humf>, sembra che le clip di UILabelToBounds ora stiano diventando FALSE come la maggior parte delle altre UIVview. Probabilmente Apple sta cercando di rendere le cose più coerenti. Anch'io ho avuto lo stesso problema.
Leslie Godwin,

2
@ChristopherKing non ho trovato documentazione su questo, ma questo ha funzionato anche nel mio scenario, sorpresa immagino :)
Raheel Sadiq

3
Grazie agli sviluppatori per Stack Overflow.
scrrr,

1
Grazie amico Mi hai risparmiato tempo (Y).
Akhtar,

66

Penso che il modo migliore per impostare il raggio dell'angolo sia:

inserisci qui la descrizione dell'immagine

e assicurati che "Clip Subview" sia selezionato:

inserisci qui la descrizione dell'immagine

Il controllo di "Visualizzazioni secondarie clip" è uguale al codice addMessageLabel.clipsToBounds = YES;.


Sicuramente, il modo più semplice
Mário Carvalho,

Questo è il modo migliore Testato con iOS 8+ e xcode 7.2.
lifeisfoo,

Se qualcuno è venuto qui cercando questo e non ha funzionato: se metti la proprietà "cornerRadius" funzionerà su iOS10 +. Su iOS9 deve essere "layer.cornerRadius"
Nathan Barreto,

clipToBounds può anche essere impostato negli Attributi di runtime definiti dall'utente (lo stesso di layer.cornerRadius): dovrebbe essere il percorso chiave: clipsToBounds, tipo: booleano, valore: vero
Chuy47

24

Prova i seguenti,

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

//or
[addMessageLabel setClipsToBounds:YES];

veloce

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

//or
addMessageLable.layer.clipsToBounds = true

5

Il mio problema era un po 'diverso.

Mentre io facevo fare btn.clipsToBounds = true

Non mi ero prefissato di fare:

btn.layer.cornerRadius = 20

Perché avevo schermi di dimensioni diverse. Invece ho seguito questa risposta e ho fatto:

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

Non funzionava perché mi ero dimenticato di aggiungere super.layoutSubviews(). Il codice corretto è:

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

Grazie mille .. Solo questa risposta ha funzionato per me. Swift 3, Xcode 8.3.3
Skywalker

3

Ho provato quello sotto e ho ottenuto un risultato di successo.

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

C'è qualcos'altro che ti sta fermando?


Prima di iOS 7.1, clipsToBoundsper impostazione predefinita YES, la riga [yourlabelname setClipsToBounds:YES];non era nel mio codice originale.
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];

Assicurati di verificare con l'obiettivo di distribuzione appropriato.


0

Aggiungi il seguente codice come estensione per 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
        }
    }
}

Dopodiché otterrai i seguenti attributi nello stesso builder di interfacce.!

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.