是否有内置的方法来创建圆角UILabels?如果答案是否定的,那么如何创建这样的对象呢?
iPhone OS 3.0及更高版本支持该类的cornerRadius
属性CALayer
.每个视图都有一个CALayer
可以操作的实例.这意味着您可以在一行中获得圆角:
view.layer.cornerRadius = 8;
您将需要#import
并链接到QuartzCore框架以访问CALayer的标头和属性.
我最近使用的一种方法是创建一个UIView子类,它只是绘制一个圆角矩形,然后制作UILabel,或者在我的例子中,UITextView,它内部的子视图.特别:
创建一个UIView
子类并将其命名为RoundRectView
.
在RoundRectView
的drawRect:
方法,绘制路径周围使用核心图形的视图的边界调用等CGContextAddLineToPoint()的边缘和与CGContextAddArcToPoint()为圆角.
创建一个UILabel
实例并使其成为RoundRectView的子视图.
将标签的框架设置为RoundRectView边界的几个像素插入.(例如,label.frame = CGRectInset(roundRectView.bounds, 8, 8);
)
如果创建通用UIView,然后使用检查器更改其类,则可以使用Interface Builder将RoundRectView放置在视图上.在编译和运行应用程序之前,您不会看到矩形,但至少您可以放置子视图并将其连接到出口或操作(如果需要).
对于iOS 7.1或更高版本的设备,您需要添加:
yourUILabel.layer.masksToBounds = YES; yourUILabel.layer.cornerRadius = 8.0;
对于基于OScarsWyck的Swift IOS8以上答案:
yourUILabel.layer.masksToBounds = true yourUILabel.layer.cornerRadius = 8.0
你有一个UILabel
叫:myLabel
.
在您的"m"或"h"文件导入中: #import
在你viewDidLoad
写这行:self.myLabel.layer.cornerRadius = 8;
取决于你想如何将cornerRadius值从8更改为其他数字:)
祝好运
您可以通过以下方式使用任何控件的边框宽度制作圆角边框: -
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
.
注意: -别忘了导入
另一种方法是在UILabel后面放置一个png.我有几个标签的视图,这些标签覆盖了单个背景png,其中包含各个标签的所有图稿.
我做了一个快速的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())
xCode 7.3.1 iOS 9.3.2
_siteLabel.layer.masksToBounds = true; _siteLabel.layer.cornerRadius = 8;