UIlabel layer.cornerRadius ไม่ทำงานใน iOS 7.1


190

ขณะนี้ฉันกำลังดู UILabel พร้อมคุณสมบัติaddMessageLabel.layer.cornerRadius = 5.0f;ในอุปกรณ์ที่ติดตั้ง iOS 7.0 จะมีมุมโค้งมน บนอุปกรณ์ที่ติดตั้ง iOS 7.1 จะไม่มีมุมโค้งมน

นี่เป็นเพียงข้อผิดพลาดกับ iOS 7.1 หรือไม่

คำตอบ:


491

ตั้งค่าคุณสมบัติclipsToBoundsเป็นจริง

addMessageLabel.clipsToBounds = true

3
ไม่แน่ใจว่าทำไมคุณไม่ต้องทำเช่นนั้นใน iOS 7 แต่ต้องใช้ iOS 7.1 แต่ใช้งานได้! ขอบคุณ
Mike V

11
ไม่ไม่แปลก ... เพียงแค่ "คืบหน้า" ... <humf> ดูเหมือนว่าคลิป ToBounds ของ UILabel กำลังเริ่มต้นเป็น FALSE เหมือนกับ UIViews อื่น ๆ ส่วนใหญ่ Apple อาจพยายามทำให้เนื้อหาสอดคล้องกันมากขึ้น ฉันก็แค่มีปัญหาเดียวกัน
เลสลี่ Godwin

2
@ChristopherKing ฉันไม่พบเอกสารเกี่ยวกับเรื่องนี้ แต่ตอนนี้ทำงานอยู่ในสถานการณ์ของฉันเกินไปแปลกใจฉันเดา :)
Raheel Sadiq

3
ขอบคุณนักพัฒนาสำหรับ Stack Overflow
scrrr

1
ขอบคุณเพื่อนคุณช่วยประหยัดเวลาของฉัน (Y)
Akhtar

66

ฉันคิดว่าวิธีที่ดีที่สุดในการกำหนดรัศมีมุมคือ:

ป้อนคำอธิบายรูปภาพที่นี่

และให้แน่ใจว่าได้เลือก "คลิปการสัมภาษณ์ย่อย":

ป้อนคำอธิบายรูปภาพที่นี่

การตรวจสอบ "คลิป subviews" addMessageLabel.clipsToBounds = YES;เท่ากับรหัส


แน่นอนวิธีที่ง่ายที่สุด
Mário Carvalho

นี่เป็นวิธีที่ดีที่สุด ทดสอบกับ iOS 8+ และ xcode 7.2
lifeisfoo

หากใครมาที่นี่กำลังมองหาสิ่งนี้และมันใช้งานไม่ได้: ถ้าคุณใส่คุณสมบัติ "cornerRadius" มันจะทำงานบน iOS10 + ใน iOS9 จะต้องมี "layer.cornerRadius"
Nathan Barreto

clipToBounds ยังสามารถตั้งค่าได้ใน User Defined Runtime Attributes (เช่นเดียวกับ layer.cornerRadius): มันควรเป็นเส้นทางที่สำคัญ: clipsToBounds พิมพ์: บูลีน, ค่า: true
Chuy47

24

ลองดังต่อไปนี้

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

//or
[addMessageLabel setClipsToBounds:YES];

รวดเร็ว

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

//or
addMessageLable.layer.clipsToBounds = true

5

ปัญหาของฉันแตกต่างกันเล็กน้อย

ในขณะที่ฉันได้ทำ btn.clipsToBounds = true

ฉันไม่ได้ตั้งใจทำ:

btn.layer.cornerRadius = 20

เพราะฉันมีขนาดหน้าจอที่แตกต่างกัน ฉันทำตามคำตอบนี้แล้ว:

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

super.layoutSubviews()มันก็ไม่ได้ทำงานเพราะผมลืมที่จะเพิ่ม รหัสที่ถูกต้องคือ:

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

ขอบคุณตัน .. เฉพาะคำตอบนี้ใช้ได้สำหรับฉัน Swift 3, Xcode 8.3.3
Skywalker

3

ฉันได้ลองด้านล่างและฉันได้ผลลัพธ์ที่ประสบความสำเร็จ

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

มีอะไรอีกบ้างที่หยุดคุณ


ก่อน iOS 7.1 clipsToBoundsจะมีการตั้งค่าเริ่มต้นเป็นYESดังนั้นบรรทัด[yourlabelname setClipsToBounds:YES];ไม่ได้อยู่ในรหัสเดิมของฉัน
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];

ตรวจสอบให้แน่ใจว่าคุณกำลังตรวจสอบกับเป้าหมายการปรับใช้ที่เหมาะสม


0

เพิ่มรหัสต่อไปนี้เป็นส่วนขยายสำหรับ 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
        }
    }
}

หลังจากนั้นคุณจะได้รับคุณสมบัติต่อไปนี้ในเครื่องมือสร้างอินเตอร์เฟส!

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.