UILabel

作者: 无邪8 | 来源:发表于2017-12-12 17:11 被阅读14次

    一、简介

    <<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

    相关文章

      网友评论

        本文标题:UILabel

        本文链接:https://www.haomeiwen.com/subject/vdhnixtx.html