UIlabel layer.cornerRadius tidak berfungsi di iOS 7.1


190

Saat ini saya sedang melihat UILabel dengan properti addMessageLabel.layer.cornerRadius = 5.0f;Pada perangkat dengan iOS 7.0 diinstal, ia memiliki sudut membulat. Pada perangkat dengan iOS 7.1 yang diinstal, itu tidak memiliki sudut bulat.

Apakah ini hanya bug dengan iOS 7.1?

Jawaban:


491

Setel properti clipsToBoundsmenjadi true

addMessageLabel.clipsToBounds = true

3
Tidak yakin mengapa Anda tidak harus melakukannya di iOS 7 tetapi harus iOS 7.1, tetapi berhasil! Terima kasih
Mike V

11
Tidak, tidak aneh ... hanya "kemajuan" ... <humf>, sepertinya clipsToBounds UILabel sekarang default ke FALSE seperti kebanyakan UIViews lainnya. Apple mungkin berusaha membuat barang lebih konsisten. Saya juga baru saja mengalami masalah yang sama.
Leslie Godwin

2
@ChristopherKing saya tidak dapat menemukan dokumentasi tentang ini, tapi ini juga berhasil dalam skenario saya, saya kira kejutan :)
Raheel Sadiq

3
Terima kasih kepada pengembang untuk Stack Overflow.
scrrr

1
Terima kasih sobat, Anda menghemat waktu saya (Y).
Akhtar

66

Saya pikir cara terbaik untuk mengatur radius sudut adalah:

masukkan deskripsi gambar di sini

dan pastikan "Subviews Klip" dicentang:

masukkan deskripsi gambar di sini

Memeriksa "Subviews Klip" sama dengan kode addMessageLabel.clipsToBounds = YES;.


Jelas, cara termudah
Mário Carvalho

Ini cara terbaik. Diuji dengan ios 8+ dan xcode 7.2.
lifeisfoo

Jika ada yang datang ke sini mencari ini dan itu tidak berhasil: jika Anda meletakkan properti "cornerRadius" itu akan berfungsi pada iOS10 +. Di iOS9 haruslah "layer.cornerRadius"
Nathan Barreto

clipToBounds juga dapat diatur dalam Atribut yang Ditentukan Pengguna (sama dengan layer.cornerRadius): itu harus menjadi kunci Path: clipsToBounds, ketik: Boolean, nilai: true
Chuy47

24

Coba yang berikut ini,

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

//or
[addMessageLabel setClipsToBounds:YES];

Cepat

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

//or
addMessageLable.layer.clipsToBounds = true

5

Masalah saya agak berbeda.

Sementara saya lakukan lakukan btn.clipsToBounds = true

Saya tidak melakukan pengaturan:

btn.layer.cornerRadius = 20

Karena saya punya ukuran layar yang berbeda. Sebaliknya saya mengikuti jawaban ini dan melakukan:

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

Itu tidak berfungsi karena saya lupa menambahkan super.layoutSubviews(). Kode yang benar adalah:

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

Terima kasih banyak .. Hanya jawaban ini yang berhasil untuk saya. Swift 3, Xcode 8.3.3
Skywalker

3

Saya telah mencoba yang di bawah ini dan saya mendapat hasil yang sukses.

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

Apakah ada hal lain yang menghentikan Anda?


Sebelum iOS 7.1, clipsToBoundsstandarnya YESjadi, jadi baris [yourlabelname setClipsToBounds:YES];itu tidak ada dalam kode asli saya.
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];

Pastikan Anda memeriksa dengan target Penempatan yang sesuai.


0

Tambahkan Kode Berikut sebagai ekstensi untuk 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
        }
    }
}

Setelah itu, Anda akan mendapatkan atribut berikut di pembuat antarmuka itu sendiri.!

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.