Как создать UILabel с круглыми углами на iPhone? - PullRequest
147 голосов
/ 04 февраля 2009

Есть ли способ создания UILabels с закругленными углами? Если ответ «нет», как можно было бы создать такой объект?

Ответы [ 16 ]

2 голосов
/ 15 августа 2017

Прекрасно работает в Xcode 8.1.2 со Swift 3, протестировано в августе 2017

"cornerRadius" - это ключевое свойство для установки закругленных краев, где, если вы используете один и тот же стиль для всех меток в вашем приложении, я бы порекомендовал использовать метод расширения.

Код:

 // extension Class
extension UILabel {

    // extension user defined Method
    func setRoundEdge() {
        let myGreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
        //Width of border
        self.layer.borderWidth = 1.0
        //How much the edge to be rounded
        self.layer.cornerRadius = 5.0

        // following properties are optional
        //color for border
        self.layer.borderColor = myGreenColor.cgColor
        //color for text
        self.textColor = UIColor.red
        // Mask the bound
        self.layer.masksToBounds = true
        //clip the pixel contents
        self.clipsToBounds = true
    }
}

Выход:

enter image description here

Почему метод расширения?

Создайте файл Swift и добавьте следующий код, который имеет метод Extention, в класс «UILabel», где этот метод определяется пользователем, но будет работать для всех меток в вашем приложении и поможет поддерживать согласованность и чистый код , если вы измените любой стиль в будущем, требуется только в методе расширения.

2 голосов
/ 30 мая 2017

Свифт 3

Если вы хотите скругленную метку с цветом фона, в дополнение к большинству других ответов, вам также нужно установить цвет фона layer. Не работает при настройке view цвет фона.

label.layer.cornerRadius = 8
label.layer.masksToBounds = true
label.layer.backgroundColor = UIColor.lightGray.cgColor

Если вы используете автоматическую разметку, хотите добавить отступы вокруг метки и не хотите устанавливать размер метки вручную, вы можете создать подкласс UILabel и переопределить intrinsincContentSize свойство:

class LabelWithPadding: UILabel {
    override var intrinsicContentSize: CGSize {
        let defaultSize = super.intrinsicContentSize
        return CGSize(width: defaultSize.width + 12, height: defaultSize.height + 8)
    }
}

Чтобы объединить два, вам также нужно установить label.textAlignment = center, иначе текст будет выровнен по левому краю.

2 голосов
/ 17 апреля 2016

Отлично работает в Swift 2.0

    @IBOutlet var theImage: UIImageView! //you can replace this with any UIObject eg: label etc


    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

    }
2 голосов
/ 14 января 2016

В Monotouch / Xamarin.iOS я решил ту же проблему, как это:

UILabel exampleLabel = new UILabel(new CGRect(0, 0, 100, 50))
        {
            Text = "Hello Monotouch red label"
        };
        exampleLabel.Layer.MasksToBounds = true;
        exampleLabel.Layer.CornerRadius = 8;
        exampleLabel.Layer.BorderColor = UIColor.Red.CGColor;
        exampleLabel.Layer.BorderWidth = 2;
2 голосов
/ 09 марта 2009

Вы пытались использовать UIButton из Интерфейсного конструктора (с закругленными углами) и экспериментировать с настройками, чтобы он выглядел как ярлык. если все, что вам нужно, это отображать статический текст внутри.

0 голосов
/ 05 ноября 2011

В зависимости от того, что именно вы делаете, вы можете сделать изображение и программно установить его в качестве фона.

...