UILabel样式展示相关

作者: linatan | 来源:发表于2016-08-06 15:48 被阅读222次

    文章内容简介

    1. 截取文本内容首行展示
    2. UILabel行间距设置

    最近遇到一种布局是如下

    uiLabel小图.jpg

    右侧的文本内容是从一个字段中取出,根据长短展示一行或者多行,但是因为第一行左侧有一个tag展示,所以对于这段文本,是选用两个lable来做展示,第一行对应firstLabel;第二(三)行对应subLabel

    这样就需要根据第一行的宽度,从字段中截取对应长度的文本内容给firstLabel;剩余的文本内容赋给subLabel;其次要注意,需要根据最终的行数,居中显示

    截断文本第一行内容

    + (NSString *)getTitleAtFirstLine:(NSString *)title
                             fontSize:(CGFloat)fontSize
                         withTageSize:(CGSize)tagSize
                       withImageWidth:(CGFloat)imageWidth
    {
        NSMutableString *firstLineStr = [NSMutableString string];
        NSString *text = @"";
        if (title)
        {
            //padding是指各个子view间的间隔
            CGFloat width = self.width - imageWidth - tagSize.width - padding;
            if (imageWidth > 0)
            {
                width -= padding;
            }
            if (tagSize.width > 0)
            {
                width -= padding;
            }
            
            CGFloat strWidth = 0;
            for (int i = 0; i < title.length; i++)
            {
                [firstLineStr appendString:[title substringWithRange:NSMakeRange(i, 1)]];
                strWidth = [firstLineStr nm_sizeWithFont:[UIFont systemFontOfSize:fontSize]].width;
                if (strWidth >= width)
                {
                    break;
                }
            }
            if (strWidth <= width)
            {
                text = firstLineStr;
            }
            else
            {
                //最后一个字超出一些,需要截掉最后一个字
                text = [firstLineStr substringWithRange:NSMakeRange(0, firstLineStr.length - 1)];
            }
    
        }
        return text;
    }
    
    

    NSString的category,计算文本内容string显示在label中需要的宽度和高度是多少

    - (CGSize)nm_sizeWithFont:(UIFont *)font 
    {
        UILabel label = [[UILabel alloc] init];
        label.numberOfLines = 0;
        label.text = self;
        label.font = font;
        CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT); //#define MAXFLOAT    0x1.fffffep+127f
        CGSize returnSize = [label sizeThatFits:size];
        return CGSizeMake(ceilf(returnSize.width), ceilf(returnSize.height));
    }
    

    subLabel的内容和行数

    //截取取内容
    NSString allContent = ...;//字段中全内容
    NSString firstLine = [[self class] getTitleAtFirstLine:title fontSize:15.0f withTageSize:tagSize withImageWidth:imageSizeWidth]; //首行内容
    
    if(firstLine.length < allContent.length)
    {
        subLabel.text = [allContent subStringFromIndex:firstLine.length];
    }
    else
    {
        subLabel.text = @"";
    }
    
    //layoutSubviews中布局展示
    NSInteger subTitleLabelRows = 0;//行数
    if (_subTitleLable.text && _subTitleLable.text.length != 0)
    {
          CGFloat strWidth = [subLabel.text nm_sizeWithFont:[UIFont systemFontOfSize:15.0f]].width;
          if (strWidth > viewWidth - imageWidth - tagWidth - 3 * padding )
          {
              subTitleLabelRows = 2;
          }
          else
          {
              subTitleLabelRows = 1;
          }
    }
    //根据行数,设置布局
    //...
    

    UILabel调整行距

    当subLabel中是多行的时候,需要调整其行距,使行距和其距离firstLabel是一样的大小,具体做法

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:subLable.text];
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:4.0f];//调整行间距
    [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [subLable.text length])];
    subLabel.attributedText = attributedString;
    [subLabel sizeToFit];
    

    这个与富文本NSAttributeString
    NSMutableAttributedString有着密切联系,通过将AttributedString赋值给控件的属性attributedText来添加文字样式。有此属性的控件有UILabel、UITextField和UITextView。

    有多种属性可以选择

    NSParagraphStyleAttributeName //段落样式NSMutableParagraphStyle
    NSForegroundColorAttributeName //文字颜色
    NSBackgroundColorAttributeName //文字背景颜色
    NSUnderlineStyleAttributeName //下划线
    ...

    参考链接

    富文本MutableAttributedString
    富文本AttributedString的总结

    相关文章

      网友评论

        本文标题:UILabel样式展示相关

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