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, але це працювало! Спасибі
Майк V

11
Ні, не дивно ... просто "прогрес" ... <humf>, схоже, що кліпи UILabelToBounds тепер не знаходяться на ЛАЖНОМУ, як і більшість інших UIView. Apple, ймовірно, намагається зробити продукти більш послідовними. У мене теж просто було те саме питання.
Леслі Годвін

2
@ChristopherKing Я не зміг знайти документацію на це, але це спрацювало і в моєму сценарії, я думаю, сюрприз :)
Рахіль Садік,

3
Дякуємо розробникам за переповнення стека.
scrrr

1
Дякую приятелю, ти врятував мій час (Y).
Ахтар

66

Я думаю, що найкращий спосіб встановити радіус кута:

введіть тут опис зображення

і переконайтеся, що "Підзагляди кліпу" встановлено:

введіть тут опис зображення

Перевірка "Перегляд кліпу" дорівнює коду addMessageLabel.clipsToBounds = YES;.


Однозначно, найпростіший спосіб
Маріо Карвальо

Це найкращий спосіб. Тестовано з ios 8+ та xcode 7.2.
lifeisfoo

Якщо хтось прийшов сюди, шукаючи це, і це не спрацювало: якщо ви помістите властивість "cornerRadius", він буде працювати на iOS10 +. На iOS9 це має бути "layer.cornerRadius"
Натан Баррето,

clipToBounds також можна встановити у визначених користувачем атрибутах часу виконання (те саме, що і layer.cornerRadius): він повинен бути ключовим Шлях: clipsToBounds, тип: Boolean, значення: 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];не був у моєму початковому коді.
Майк 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
        }
    }
}

Після цього ви отримаєте такі атрибути в самому конструкторі інтерфейсів.!

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.