UIlabel layer.cornerRadius iOS 7.1'de çalışmıyor


190

Şu anda özelliği ile bir UILabel bakıyorum addMessageLabel.layer.cornerRadius = 5.0f;iOS 7.0 yüklü bir cihazda, köşeleri yuvarlatılmış. İOS 7.1 yüklü bir cihazda köşeleri yuvarlatılmış değildir.

Bu iOS 7.1 ile ilgili bir hata mı?

Yanıtlar:


491

Özelliği clipsToBoundstrue olarak ayarlayın

addMessageLabel.clipsToBounds = true

3
Neden iOS 7'de bunu yapmak zorunda olmadığınızdan emin değilsiniz, ancak iOS 7.1'de olmak zorundasınız, ancak işe yaradı! Teşekkürler
Mike V

11
Hayır, garip değil ... sadece "ilerleme" ... <humf>, UILabel'ın clipsToBounds'unun artık diğer çoğu UIViews gibi FALSE için varsayılan olduğu görülüyor. Apple muhtemelen maddeleri daha tutarlı hale getirmeye çalışıyor. Ben de aynı sorunu yaşadım.
Leslie Godwin

2
@ChristopherKing Bu konuda belge bulamadım, ama bu benim senaryomda da çalıştı, sanırım sürpriz :)
Raheel Sadiq

3
Stack Overflow için geliştiricilere teşekkür ederiz.
scrrr

1
Teşekkürler dostum Zamanımı kurtardın (Y).
Akhtar

66

Köşe yarıçapını ayarlamanın en iyi yolu:

resim açıklamasını buraya girin

"Klip Alt Görüşleri" nin işaretli olduğundan emin olun:

resim açıklamasını buraya girin

"Klip Alt Görüşleri" ni kontrol etmek koda eşittir addMessageLabel.clipsToBounds = YES;.


Kesinlikle, en kolay yol
Mário Carvalho

Bu en iyi yol. İos 8+ ve xcode 7.2 ile test edilmiştir.
lifeisfoo

Eğer kimse buraya bakmaya geldi ve işe yaramadı: "cornerRadius" özelliğini koyarsanız iOS10 + 'da çalışır. İOS9'da "layer.cornerRadius" olmalı
Nathan Barreto

clipToBounds ayrıca Kullanıcı Tanımlı Çalışma Zamanı Özniteliklerinde de ayarlanabilir (layer.cornerRadius ile aynıdır): anahtar olmalıdır. Path: clipsToBounds, type: Boolean, value: true
Chuy47

24

Aşağıdakileri deneyin,

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

//or
[addMessageLabel setClipsToBounds:YES];

hızlı

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

//or
addMessageLable.layer.clipsToBounds = true

5

Sorunum biraz farklıydı.

Ben iken yaptığı do btn.clipsToBounds = true

Ben ayar yapmıyordum:

btn.layer.cornerRadius = 20

Çünkü farklı ekran boyutlarına sahiptim. Bunun yerine bu cevabı takip ettim ve yaptım:

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

Çalışmıyordu çünkü eklemeyi unuttum super.layoutSubviews(). Doğru kod:

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

Bir ton teşekkürler .. Sadece bu cevap benim için çalıştı. Swift 3, Xcode 8.3.3
Skywalker

3

Aşağıdakini denedim ve başarılı bir çıktı aldım.

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

Sizi durduran başka bir şey var mı?


İOS 7.1'den önce clipsToBoundsvarsayılan olarak ayarlandığından YES, satır [yourlabelname setClipsToBounds:YES];orijinal kodumda değildi.
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];

Uygun Dağıtım hedefini kontrol ettiğinizden emin olun.


0

Aşağıdaki Kodu UIView için uzantı olarak ekleyin

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

Bundan sonra arayüz oluşturucunun kendisinde aşağıdaki nitelikleri alacaksınız.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.