UILabel

一、简介

<<UILabel类实现一个只读的文本视图。您可以使用这个类的静态文本,如你可能会使用它来识别你的用户界面的其他部分,绘制一个或多个行。基本UILabel类提供控制文本的外观,包括它是否使用了一层阴影,或汲取的一大亮点。如果需要,您可以自定义文本的外观进一步通过继承

<<UILabel(标签) : 是显示文本的控件.在App中UILabel是出现频率最高的控件之一.

<<继承关系:UILabel --> UIView -->UIResponder-->NSObject

<<UILabel是UIView的子类,作为子类一般是为了扩充父类的功能,UILabel扩展了文字显示的功能,UILabel是能显示文字的视图.


格式为

1--> 设置文字(属性的作用

typedef NS_ENUM(NSInteger, NSTextAlignment) {

NSTextAlignmentLeft      = 0,    // Visually left aligned

#if TARGET_OS_IPHONE

NSTextAlignmentCenter    = 1,    // Visually centered

NSTextAlignmentRight    = 2,    // Visually right aligned

#else /* !TARGET_OS_IPHONE */

NSTextAlignmentRight    = 1,    // Visually right aligned

NSTextAlignmentCenter    = 2,    // Visually centered

#endif

NSTextAlignmentJustified = 3,    // Fully-justified. The last line in a paragraph is natural-aligned.

NSTextAlignmentNatural  = 4,    // Indicates the default alignment for script

}(如果属性有枚举类型的话,这里会有枚举类型说明

label.text  = @"Hello World!!!";   (这是具体的例子

@property(nullable, nonatomic,copy)   NSString      *text;// 设置显示文字, 默认是空的   (这是属性的说明


二、UILabel的文本属性(属性的顺序与苹果API一致)

1-->设置文字

label.text  = @"Hello World!!!";

@property(nullable, nonatomic,copy)   NSString   *text;// 设置显示文字, 默认是空的

2-->设置字号//一般方法

label.font = [UIFont systemFontOfSize:30];

@property(null_resettable, nonatomic,strong) UIFont *font;//  设置字体(系统字体默认17号字体)

3-->文字字体加粗//系统加粗方法

[Label setFont:[UIFont boldSystemFontOfSize:25]];

4-->设置文字字体和字号

label.font = [UIFont fontWithName:@"Zapfino"size:30];

5-->设置文字字体加粗

[Label setFont:[UIFont fontWithName:@"Helvetica-Bold"size:25]];

6-->设置文字颜色

label.textColor =  [UIColor blueColor];

@property(null_resettable, nonatomic,strong) UIColor   *textColor;//  字体的颜色(默认是黑色)

7-->阴影颜色--设置文字的阴影颜色

label.shadowColor = [UIColor redColor];

@property(nullable, nonatomic,strong) UIColor  *shadowColor;//   阴影的颜色


8--> shadowOffset 阴影偏移(必须先设置文字的阴影颜色)--让文字在原有的基础上偏移

label.shadowOffset = CGSizeMake(2,2);

@property(nonatomic)        CGSize      shadowOffset;// 阴影的偏移量,默认是 CGSizeMake(0, -1) 

9-->文字对齐方式

typedef NS_ENUM(NSInteger, NSTextAlignment) {

NSTextAlignmentLeft      = 0,    // 居左对齐

#if TARGET_OS_IPHONE

NSTextAlignmentCenter    = 1,    //居中对齐

NSTextAlignmentRight    = 2,    // 居右对齐

#else /* !TARGET_OS_IPHONE */

NSTextAlignmentRight    = 1,    //居右对齐

NSTextAlignmentCenter    = 2,    //居中对齐

#endif

NSTextAlignmentJustified = 3,    //合理铺满 等同于居左

NSTextAlignmentNatural  = 4,    //默认 等同于居左

}

label.textAlignment = NSTextAlignmentCenter;

@property(nonatomic)        NSTextAlignment    textAlignment;//  对齐方式,默认是NSTextAlignmentNatural (iOS 9之前, 默认是 NSTextAlignmentLeft)

注意:

默认都是竖直居中的

UILabel不能设置竖直方向的排列布局,但是可以通过sizeToFit改变label的frame来实现曲线救国。

10-->断行模式

typedef NS_ENUM(NSInteger, NSLineBreakMode) {

NSLineBreakByWordWrapping = 0,    //以单词为显示单位显示,后面部分省略不显示。

NSLineBreakByCharWrapping, //以字符为显示单位显示,后面部分省略不显示。

NSLineBreakByClipping, //剪切与文本宽度相同的内容长度,后半部分被删除。

NSLineBreakByTruncatingHead, //前面部分文字以……方式省略,显示尾部文字内容。

NSLineBreakByTruncatingTail, //结尾部分的内容以……方式省略,显示头的文字内容

NSLineBreakByTruncatingMiddle //中间的内容以……方式省略,显示头尾的文字内容。

} NS_ENUM_AVAILABLE(10_0, 6_0);

label.lineBreakMode = NSLineBreakByClipping;

@property(nonatomic)        NSLineBreakMode    lineBreakMode(换行方式);// 默认是 NSLineBreakByTruncatingTail.用于多行和多行文本 字符截断类型 设置文字过长时的显示格式 

例子:

NSLineBreakByClipping--会出现显示半个字的情况

NSLineBreakByTruncatingHead--没显示玩的文字会以省略号形式代替显示(省略号出现在左下角)

NSLineBreakByTruncatingTail--(省略号出现在右下角)

NSLineBreakByTruncatingTail--(省略号出现在最后一行的中间位置)

三、UILabel的富文本属性

1-->attributedText更改任意文字的颜色和字体大小

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:label.text];-->先把label上的文字赋值给可变字符串

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(5,10)];-->设置更改后的颜色和改变文字的区域

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Courier-BoldOblique" size:30.0] range:NSMakeRange(20, 25)];-->设置更改后的字体大小和改变文字的区域

label.attributedText = str;-->把改后的字符串重新赋值给label

@property(nullable, nonatomic,copy) NSAttributedString *attributedText NS_AVAILABLE_IOS(6_0); 

四、UILabel的高亮属性

1-->highlighted高亮显示时候的文本颜色

label.highlightedTextColor=[UIColor blueColor];//高亮显示时候的文本颜色

@property(nullable, nonatomic,strong)               UIColor *highlightedTextColor; // 高亮 状态的字体颜色

2-->highlighted是否高亮显示

label.highlighted=YES;

@property(nonatomic,getter=isHighlighted) BOOL     highlighted;          //是否高亮, 默认是NO

3-->设置是否能与用户进行交互

label.userInteractionEnabled = YES;

@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled;  //   设置是否能与用户进行交互,默认没有打开交互

4-->设置label中的文字是否可变

label.enabled = YES;

@property(nonatomic,getter=isEnabled)                BOOL enabled; // 设置label中的文字是否可变,默认值是YES

五、UILabel的换行属性

1-->设置文字换行

label.numberOfLines = 0;

@property(nonatomic) NSInteger numberOfLines;//换行 默认值是1行。0值意味着没有限制

注意:

// 最大显示的行数(默认是1)

// Δ 这里需要去理解一下

//  1. 当label的内容足够多, 而且, label足够高, 最大显示numberOfLines行

//  2. 当label的内容足够多, 但是, label的高度不够高, 最大显示label能容纳多少行

//  3. 当label的内容不够多, 能显示多少行, 显示多少行

// o 表示不限制最大行数

六、UILabel的自适应属性

1-->设置字体自适应adjustsLetterSpacingToFitWidth

label.adjustsLetterSpacingToFitWidth=YES;

@property(nonatomic) BOOL adjustsFontSizeToFitWidth;         // default is NO  设置字体大小适应label宽度     默认NO

2-->控制文本基线

typedef NS_ENUM(NSInteger, UIBaselineAdjustment) {

UIBaselineAdjustmentAlignBaselines = 0, // default. used when shrinking text to position based on the original baseline 默认,文本最上端与中线对齐

UIBaselineAdjustmentAlignCenters,//文本中线与label中线对齐

UIBaselineAdjustmentNone,//文本最低端与label中线对齐。

};

label.baselineAdjustment=UIBaselineAdjustmentAlignBaselines;

@property(nonatomic) UIBaselineAdjustment baselineAdjustment; // 默认是UIBaselineAdjustmentAlignBaselines,如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为

3-->minimumScaleFactor设置最小收缩比例

label.minimumScaleFactor=0.5;

@property(nonatomic) CGFloat minimumScaleFactor NS_AVAILABLE_IOS(6_0); // 默认是0

注意:

Fixed Font Size默认,如果label宽度小于文字长度时,文字大小不自动缩放

minimumScaleFactor设置最小收缩比例,如果Label宽度小于文字长度时,文字进行收缩,收缩超过比例后,停止收缩。

4-->设置多行label的最大宽度的

label.allowsDefaultTighteningForTruncation=YES;这个属性是用来设置多行label的最大宽度的

@property(nonatomic) BOOL allowsDefaultTighteningForTruncation NS_AVAILABLE_IOS(9_0); // 默认是NO

注意:

当自动布局的时候约束这个label的时候这个属性会起作用

在自动布局添加约束中,若文本超过了指定的最大宽度的时候 文本会另起一行 从而增加了label的高度

七、UILabel的图和定位覆盖方法

1-->计算UILabel随字体多行后的高度

CGRect bounds = CGRectMake(0, 0, 200, 300);

heightLabel = [myLabel textRectForBounds:bounds

limitedToNumberOfLines:20]; //计算20行后的Label的Frame

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines;

2-->描边label

- (void)drawTextInRect:(CGRect)rect {

CGSizeshadowOffset =self.shadowOffset;

UIColor*textColor =self.textColor;

 CGContextRef c = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(c,self.outlineWidth);

 CGContextSetLineJoin(c, kCGLineJoinRound); 

CGContextSetTextDrawingMode(c, kCGTextStroke);

self.textColor=self.outlineColor; 

[superdrawTextInRect:rect];

 CGContextSetTextDrawingMode(c, kCGTextFill);

self.textColor= textColor;

self.shadowOffset= CGSizeMake(0,0); 

[superdrawTextInRect:rect];

self.shadowOffset= shadowOffset;

}

- (void)drawTextInRect:(CGRect)rect;

八、UILabel的auto layou属性

1-->设置了auto layou的适配宽度

label.preferredMaxLayoutWidth =label.frame.size.width;

iOS6开始 UILabel下面需要设置preferredMaxLayoutWidth ,设置了autolayout和numberofline的UIlabel才显示多行

九、UILabel的边框圆角属性

1-->borderWidth设置边框宽度

label.layer.borderWidth=2;

2-->borderColor设置边框颜色

label.layer.borderColor=[UIColor blueColor].CGColor

3-->设置圆角颜色

label.backgroundColor=[UIColor blueColor];;

4-->设置圆角半径

label.layer.cornerRadius =5;

十、UILabel的边框圆角拓展

第一种方法:通过设置layer的属性

最简单的一种,但是很影响性能,一般在正常的开发中使用很少.

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];

//只需要设置layer层的两个属性

//设置圆角

imageView.layer.cornerRadius = imageView.frame.size.width /2;

//将多余的部分切掉

imageView.layer.masksToBounds =YES;

[self.view addSubview:imageView];


第二种方法:使用贝塞尔曲线UIBezierPath和Core Graphics框架画出一个圆角

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];

imageView.image= [UIImage imageNamed:@"1"];//开始对imageView进行画图UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO,1.0);//使用贝塞尔曲线画出一个圆形图[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.frame.size.width] addClip];

[imageView drawRect:imageView.bounds];

imageView.image=UIGraphicsGetImageFromCurrentImageContext();//结束画图UIGraphicsEndImageContext();

[self.view addSubview:imageView];


第三种方法:使用CAShapeLayer和UIBezierPath设置圆角

首先需要导入<AVFoundation/AVFoundation.h>

UIImageView*imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100,100,100,100)];

imageView.image= [UIImage imageNamed:@"1"];

UIBezierPath*maskPath =[UIBezierPath bezierPathWithRoundedRect:imageView.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:imageView.bounds.size];

CAShapeLayer*maskLayer =[[CAShapeLayer alloc]init];

//设置大小

maskLayer.frame =imageView.bounds;

//设置图形样子

maskLayer.path =maskPath.CGPath;

imageView.layer.mask=maskLayer;

[self.view addSubview:imageView];


这三种方法中第三种最好,对内存的消耗最少啊,而且渲染快速

出处:http://www.jianshu.com/p/f091fe0d06ed

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • UILabel是一个常用的控件,它的属性设置的方法在纯代码中经常使用。在storyboard中,使用UILabel...
    坤哥lqk阅读 844评论 0 2
  • 对于UILabel其实我觉得并没有太多的要素需要仔细去弄明白的,因为至今为止,我所了解到的label属性不外乎就是...
    懒惰的习惯阅读 567评论 0 0
  • 不知道有多少人听过这样的传闻: 据说,在某些学校门口,有一些豪车的车顶会放着一瓶或两瓶饮料。如果有人上去拿瓶子就意...
    朱三萌阅读 600评论 6 24
  • 什么是市场营销?其基本目的是什么? 以前理解的市场营销是商品和顾客的关系,是推销的这个过程。今天看到他的准确定义不...
    向应昌阅读 1,316评论 1 3
  • 老爹是20多年的老烟民了。 都说夫妻之间互补是最和谐的,作为家里两位大宝贝的婚姻见证者和副产品,我深以为然。 老爹...
    16118f1f5e2c阅读 318评论 8 9