当前位置:  开发笔记 > IOS > 正文

如何在iPhone上创建圆角UILabel?

如何解决《如何在iPhone上创建圆角UILabel?》经验,为你挑选了8个好方法。

是否有内置的方法来创建圆角UILabels?如果答案是否定的,那么如何创建这样的对象呢?



1> benzado..:

iOS 3.0及更高版本

iPhone OS 3.0及更高版本支持该类的cornerRadius属性CALayer.每个视图都有一个CALayer可以操作的实例.这意味着您可以在一行中获得圆角:

view.layer.cornerRadius = 8;

您将需要#import 并链接到QuartzCore框架以访问CALayer的标头和属性.

在iOS 3.0之前

我最近使用的一种方法是创建一个UIView子类,它只是绘制一个圆角矩形,然后制作UILabel,或者在我的例子中,UITextView,它内部的子视图.特别:

    创建一个UIView子类并将其命名为RoundRectView.

    RoundRectViewdrawRect:方法,绘制路径周围使用核心图形的视图的边界调用等CGContextAddLineToPoint()的边缘和与CGContextAddArcToPoint()为圆角.

    创建一个UILabel实例并使其成为RoundRectView的子视图.

    将标签的框架设置为RoundRectView边界的几个像素插入.(例如,label.frame = CGRectInset(roundRectView.bounds, 8, 8);)

如果创建通用UIView,然后使用检查器更改其类,则可以使用Interface Builder将RoundRectView放置在视图上.在编译和运行应用程序之前,您不会看到矩形,但至少您可以放置​​子视图并将其连接到出口或操作(如果需要).


如果不起作用,请添加[layer setMasksToBounds:YES];
如果你想这样做在Interface Builder,而不是代码,你可以设置身份检查与关键路径"layer.cornerRadius"用户自定义运行属性.

2> OscarWyck..:

对于iOS 7.1或更高版本的设备,您需要添加:

yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;


设置角半径但maskToBounds对于滚动/动画来说很慢.如果你设置图层的背景颜色与足够的视图以及7.1上的图层的cornerRadius(它将停止仅使用cornerRadius).

3> VBaarathi..:

对于基于OScarsWyck的Swift IOS8以上答案:

yourUILabel.layer.masksToBounds = true
yourUILabel.layer.cornerRadius = 8.0


请不要将Stack Overflow与Objective-C的翻译混合到Swift中,特别是在这种情况下唯一的变化是将`YES`改为`true`时.
这种情况的变化很小,但作为一般意义,从Objective-C到Swift的翻译通常非常有用.

4> Gabriel..:

    你有一个UILabel叫:myLabel.

    在您的"m"或"h"文件导入中: #import

    在你viewDidLoad写这行:self.myLabel.layer.cornerRadius = 8;

    取决于你想如何将cornerRadius值从8更改为其他数字:)

祝好运



5> Piyush Dubey..:

您可以通过以下方式使用任何控件的边框宽度制作圆角边框: -

CALayer * l1 = [lblName layer];
[l1 setMasksToBounds:YES];
[l1 setCornerRadius:5.0];

// You can even add a border
[l1 setBorderWidth:5.0];
[l1 setBorderColor:[[UIColor darkGrayColor] CGColor]];


只需替换lblName你的UILabel.

注意: -别忘了导入



6> Alpinista..:

另一种方法是在UILabel后面放置一个png.我有几个标签的视图,这些标签覆盖了单个背景png,其中包含各个标签的所有图稿.



7> Besi..:

我做了一个快速的UILabel子类来实现这个效果.此外,我自动将文本颜色设置为黑色或白色以获得最大对比度.

结果

颜色,圆角边框

二手SO-Posts:

如何在UILabel周围画边框?

在UIView之外添加边框

检查UIColor是暗还是亮?

操场

只需将其粘贴到iOS Playground:

//: Playground - noun: a place where people can play

import UIKit

class PillLabel : UILabel{

    @IBInspectable var color = UIColor.lightGrayColor()
    @IBInspectable var cornerRadius: CGFloat = 8
    @IBInspectable var labelText: String = "None"
    @IBInspectable var fontSize: CGFloat = 10.5

    // This has to be balanced with the number of spaces prefixed to the text
    let borderWidth: CGFloat = 3

    init(text: String, color: UIColor = UIColor.lightGrayColor()) {
        super.init(frame: CGRectMake(0, 0, 1, 1))
        labelText = text
        self.color = color
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup(){
        // This has to be balanced with the borderWidth property
        text = "  \(labelText)".uppercaseString

        // Credits to /sf/ask/17360801/
        layer.borderWidth = borderWidth
        layer.cornerRadius = cornerRadius
        backgroundColor = color
        layer.borderColor = color.CGColor
        layer.masksToBounds = true
        font = UIFont.boldSystemFontOfSize(fontSize)
        textColor = color.contrastColor
        sizeToFit()

        // Credits to /sf/ask/17360801/
        frame = CGRectInset(self.frame, -borderWidth, -borderWidth)
    }
}


extension UIColor {
    // Credits to /sf/ask/17360801/
    func isLight() -> Bool{
        var green: CGFloat = 0.0, red: CGFloat = 0.0, blue: CGFloat = 0.0, alpha: CGFloat = 0.0
        self.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
        let brightness = ((red * 299) + (green * 587) + (blue * 114) ) / 1000

        return brightness < 0.5 ? false : true
    }

    var contrastColor: UIColor{
        return self.isLight() ? UIColor.blackColor() : UIColor.whiteColor()
    }
}

var label = PillLabel(text: "yellow", color: .yellowColor())

label = PillLabel(text: "green", color: .greenColor())

label = PillLabel(text: "white", color: .whiteColor())

label = PillLabel(text: "black", color: .blackColor())



8> Ahmed Abdall..:

xCode 7.3.1 iOS 9.3.2

 _siteLabel.layer.masksToBounds = true;
  _siteLabel.layer.cornerRadius = 8;

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有