Lớp UIlabel.cornerRadius không hoạt động trong iOS 7.1


189

Tôi hiện đang xem một UILabel có thuộc tính addMessageLabel.layer.cornerRadius = 5.0f;Trên một thiết bị có cài đặt iOS 7.0, nó có các góc tròn. Trên thiết bị có cài đặt iOS 7.1, thiết bị không có các góc tròn.

Đây có phải chỉ là một lỗi với iOS 7.1?

Câu trả lời:


490

Đặt thuộc tính clipsToBoundsthành đúng

addMessageLabel.clipsToBounds = true

3
Không chắc chắn tại sao bạn không phải làm điều đó trên iOS 7 mà phải vào iOS 7.1, nhưng nó đã hoạt động! Cảm ơn
Mike V

11
Không, không lạ ... chỉ là "tiến bộ" ... <humf>, có vẻ như clipToBound của UILabel hiện đang được mặc định là FALSE như hầu hết các UIView khác. Apple có lẽ đang cố gắng để làm cho các công cụ phù hợp hơn. Tôi cũng có vấn đề tương tự.
Leslie Godwin

2
@ChristopherKing tôi không thể tìm thấy tài liệu về điều này, nhưng điều này cũng có tác dụng trong kịch bản của tôi, tôi đoán thật bất ngờ :)
Raheel Sadiq

3
Cảm ơn các nhà phát triển cho Stack Overflow.
Scrrr

1
Cảm ơn bạn thân Bạn đã tiết kiệm thời gian của tôi (Y).
Akhtar

66

Tôi nghĩ cách tốt nhất để đặt bán kính góc là:

nhập mô tả hình ảnh ở đây

và chắc chắn rằng "Clip Subview" đã được chọn:

nhập mô tả hình ảnh ở đây

Kiểm tra "Clip Subview" bằng mã addMessageLabel.clipsToBounds = YES;.


Chắc chắn, cách dễ nhất
Mário Carvalho

Đây la cach tôt nhât. Đã thử nghiệm với ios 8+ và xcode 7.2.
lifeisfoo

Nếu bất cứ ai đến đây tìm kiếm cái này và nó không hoạt động: nếu bạn đặt thuộc tính "angleRadius" thì nó sẽ hoạt động trên iOS10 +. Trên iOS9, nó phải là "layer.cornerRadius"
Nathan Barreto

clipToBound cũng có thể được đặt trong Thuộc tính Thời gian chạy do Người dùng Xác định (giống như layer.cornerRadius): đó phải là Đường dẫn chính: clipToBound, loại: Boolean, value: true
Chuy47

24

Hãy thử làm theo,

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

//or
[addMessageLabel setClipsToBounds:YES];

Nhanh

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

//or
addMessageLable.layer.clipsToBounds = true

5

Vấn đề của tôi là một chút khác nhau.

Trong khi tôi đã làm btn.clipsToBounds = true

Tôi đã không thiết lập làm:

btn.layer.cornerRadius = 20

Bởi vì tôi có kích thước màn hình khác nhau. Thay vào đó tôi làm theo câu trả lời này và đã làm:

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

Nó không hoạt động vì tôi quên thêm super.layoutSubviews(). Mã chính xác là:

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

Cảm ơn rất nhiều .. Chỉ có câu trả lời này làm việc cho tôi. Swift 3, Xcode 8.3.3
Skywalker

3

Tôi đã thử cái dưới đây và tôi đã có một đầu ra thành công.

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

Có điều gì khác đang ngăn cản bạn?


Trước iOS 7.1, clipsToBoundsđã được mặc định YES, vì vậy dòng [yourlabelname setClipsToBounds:YES];này không nằm trong mã gốc của tôi.
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];

Hãy chắc chắn rằng bạn đang kiểm tra với mục tiêu Triển khai thích hợp.


0

Thêm mã sau đây làm tiện ích mở rộng cho 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
        }
    }
}

Sau đó, bạn sẽ nhận được các thuộc tính sau trong chính trình xây dựng giao diện.!

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.