UIlabel layer.cornerRadius не работает в iOS 7.1


190

В настоящее время я смотрю на UILabel со свойством addMessageLabel.layer.cornerRadius = 5.0f;На устройстве с установленной iOS 7.0 у него закругленные углы. На устройстве с установленной iOS 7.1 оно не имеет закругленных углов.

Это просто ошибка в iOS 7.1?

Ответы:


491

Установите для свойства clipsToBoundsзначение true

addMessageLabel.clipsToBounds = true

3
Не знаю, почему вам не нужно было делать это на iOS 7, а на iOS 7.1, но это сработало! Спасибо
Майк V

11
Нет, не странно ... просто "прогресс" ... <humf>, похоже, что UILabel clipsToBounds теперь по умолчанию имеет значение FALSE, как и большинство других UIViews. Apple, вероятно, пытается сделать вещи более последовательными. У меня тоже была такая же проблема.
Лесли Годвин

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

3
Спасибо разработчикам за переполнение стека.
scrrr

1
Спасибо, приятель. Ты сэкономил мое время (Y).
Ахтар

66

Я думаю, что лучший способ установить радиус угла:

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

и убедитесь, что «Subviews клипа» отмечен:

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

Проверка «Клип подпредставлений» равна коду addMessageLabel.clipsToBounds = YES;.


Определенно, самый простой способ
Марио Карвалью

Это лучший способ. Протестировано с ios 8+ и xcode 7.2.
lifeisfoo

Если кто-то пришел сюда в поисках этого, и это не сработало: если вы установите свойство «cornerRadius», оно будет работать на iOS10 +. На iOS9 это должен быть «layer.cornerRadius»
Натан Баррето

clipToBounds также может быть установлен в определяемых пользователем атрибутах времени выполнения (так же, как layer.cornerRadius): это должен быть ключ Path: 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.