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?

Mike V
sumber

Jawaban:

491

Setel properti clipsToBoundsmenjadi true

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

Allen
sumber
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
Tapas Pal
sumber
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
}
Madu
sumber
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?

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

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

Pastikan Anda memeriksa dengan target Penempatan yang sesuai.

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

BharathRao
sumber