UILabel

作者: Barry_小闪 | 来源:发表于2016-05-21 21:13 被阅读2205次

    UILabel:UIView UIView属性和方法UILabel都拥有
    作用是专门用来显示文字的控件

    目录

    • label相关的属性
    • 对齐模式
    • 设置换行模式
    • 自动计算label高度的前提是固定label的宽度,自动换行
    • ios动态获取UILabel的高度和宽度
    • 判断label的text 是否超出显示范围
    • 调整行间距

    label相关的属性

    • text(核心属性)
    [label setText:@"hello world 你好"];
    

    UIFont是UI字体类

    • 创建系统常规字体并且设置字体大小
    UIFont * font = [UIFont systemFontOfSize:15];
    
    • 系统默认加粗字体
    UIFont * font1 = [UIFont boldSystemFontOfSize:15];
    
    • 系统默认斜体
    UIFont * font2 = [UIFont italicSystemFontOfSize:15];
    
    • 拿到当前系统支持的所有的字体名
    NSArray * allFontName = [UIFont familyNames]; 
    NSLog(@"%@", allFontName);
    
    设置字体名和字体大小
    UIFont * font3 = [UIFont fontWithName:@"Zapfino" size:16];
        
    设置字体
    [label setFont:font];
        ```
        
    - 6.设置文字颜色(默认是黑色)
    ```objc
        label.textColor = [UIColor redColor];
    
    • 7.设置阴影颜色
        label.shadowColor = [UIColor grayColor];
    
    • 8.设置阴影偏移
        [label setShadowOffset:CGSizeMake(2, 2)];
    

    对齐模式

    居左 (默认)
    NSTextAlignmentLeft 
    居中
    NSTextAlignmentCenter  
    居右
    NSTextAlignmentRight 
    [label setTextAlignment:NSTextAlignmentLeft];
    

    设置换行模式

    [label setLineBreakMode:NSLineBreakByTruncatingMiddle];
    
    • 以一个单词为单位换行,最一行显示不全内容以单词截断,后面直接不显示
    NSLineBreakByWordWrapping
    
    • 以字符换行
    NSLineBreakByCharWrapping   
    
    • 以一个单词为单位换行,最后一行显示不全的内容,在label的最后直接截断,后面直接不显示
    NSLineBreakByClipping   
    
    • 显示不全;最后一行将最后的内容显示,前面使用...代替
      例:Truncate at head of line: "...wxyasdasdz"
    NSLineBreakByTruncatingHead
    
    • 显示不全;最后一行将前面的内容显示,最后使用...代替
      例:Truncate at tail of line: "abcd..."
     NSLineBreakByTruncatingTail
    
    • 显示不全;最后一行将前面的内容显示和最后的内容显示,中间使用...代替
    NSLineBreakByTruncatingMiddle 
    
    • 行数(要适应label高度才行)
     [label setNumberOfLines:3];
    
    • 自动换行(将内容显示全的前提是label的高度足够高)
     1.设置设置行数为0
        [label setNumberOfLines:0];
      2.设置换行模式
        [label setLineBreakMode:NSLineBreakByWordWrapping];
    
    • 自适应宽度(将字体缩放,以致所有的文字都显示全)
      [label setAdjustsFontSizeToFitWidth:YES];
    

    自动计算label高度的前提是固定label的宽度,自动换行

    • 固定宽度为200,要显示的字符串是下面这个字符串
        NSString * str = @"阿什顿客服哈是客户的空间哈伦裤的是否考虑啥可来得及发货时看见啊奥斯卡交电话费看见啦释放及时奥斯卡恢复卡是否啊开始地方可拉伸阿什顿客服哈是客户的空间哈伦裤的是否考虑啥可来得及发货时看见啊奥斯卡交电话费看见啦释放及时奥斯卡恢复卡是否啊开始地方可拉伸";
    
    • 计算显示当前字符串需要多大的空间(宽和高)
    • 参数1:限制显示当前字符串的最大宽度和最大高度
    • 参数2:渲染模式
    • 参数3:字符串的属性(设置文字颜色和字体)
    • NSFontAttributeName:设置字体的键
    • NSForegroundColorAttributeName:设置文字颜色的键
    • 参数4:上下文
    CGRect rect = [str boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17], NSForegroundColorAttributeName:[UIColor redColor]} context:nil];
    
    • 创建label显示文字
        UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, rect.size.width, rect.size.height)];
    
    • 设置文字
    label.text = str;
    
    • 自动换行
        label.numberOfLines = 0;
        label.lineBreakMode = NSLineBreakByWordWrapping;
    
    • label的字体要和我们计算的字体一样的大,或者比计算的字体小
    label.font = [UIFont systemFontOfSize:17];
    

    ios动态获取UILabel的高度和宽度

    http://www.cnblogs.com/spiritstudio/archive/2011/11/17/2252074.html

    在使用UILabel存放字符串时,经常需要获取label的长宽数据,本文列出了部分常用的计算方法。
    
    1.获取宽度,获取字符串不折行单行显示时所需要的长度 
    CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 30)];
    注:如果想得到宽度的话,size的width应该设为MAXFLOAT。
    
    2.获取高度,获取字符串在指定的size内(宽度超过label的宽度则换行)所需的实际高度.
    
    CGSize titleSize = [aString sizeWithFont:font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
    注:如果想得到高度的话,size的height应该设为MAXFLOAT。
    
    3.实际编程时,有时需要计算一段文字最后一个字符的位置,并在其后添加图片或其他控件(如info图标),下面代码为计算label中最后一个字符后面一位的位置的方法。
    
    CGSize sz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, 40)];
    CGSize linesSz = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
    if(sz.width <= linesSz.width) //判断是否折行
    {
            lastPoint = CGPointMake(label.frame.origin.x + sz.width, label.frame.origin.y);  
    }
    else  
    {  
            lastPoint = CGPointMake(label.frame.origin.x + (int)sz.width % (int)linesSz.width,linesSz.height - sz.height);  
    } 
    
    
    

    判断label的text 是否超出显示范围

    
    NSString *aString = @"按实际大奖是拉萨就对啦卡死了都就拉上";
        _lable = [[UILabel alloc]initWithFrame:CGRectMake(50, 20, 150, 50)];
        _lable.text = aString;
        _lable.textColor = [UIColor blackColor];
       
        [_lable setNumberOfLines:2];
        //拿到实际的Label长度
        CGSize titleSize = [aString sizeWithFont:_lable.font constrainedToSize:CGSizeMake(MAXFLOAT, 50)];
       //作比较
        NSLog(@"%lf", titleSize.width);
        NSLog(@"%lf", _lable.frame.size,width);
    
        [self.view addSubview:_lable];
    
    iOS10 显示文字不全,添加方法解决
    iOS10显示文字

    调整行间距

    
     UILabel *yearVipLabel = [[UILabel alloc]initWithFrame:CGRectMake(intevar, CGRectGetMaxY(yearVipTitle.frame) + intevar, self.view.width - intevar * 2, 200)];
    
     yearVipLabel.numberOfLines = 0;
    
     NSString *descStr = _buyYearInfoModel.desc;
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:descStr];
     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
     [paragraphStyle setLineSpacing:15];//调整行间距
     [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [descStr length])];
     yearVipLabel.attributedText = attributedString;
    
    

    相关文章

      网友评论

          本文标题:UILabel

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