UILabel

2018年4月12日
1.目前已经支持 文本里面含有换行符\n,在自定义文本间距。

2017年3月24日
一.实现自定义高度的文本行间距
1.效果:


Paste_Image.png

2.实现
第一步定义扩展函数

//  UILabel+Category.h

#import <UIKit/UIKit.h>

@interface UILabel (HSPXAdd)
/*一般控制UILabel中文字不同风格显示的步骤
 1>先设置段落的风格NSMutableParagraphStyle/NSParagraphStyle;
 2>再设置NSAttributedString对象;
 3>NSAttributedString对象赋值给UILabel的attributedText;*/

- (CGSize)multipleLinesSizeWithLineSpacing:(CGFloat)lineSpacing andViewWidth:(CGFloat)viewWidth;
@end

#import "UILabel+Category.h"

@implementation UILabel (HSPXAdd)

+ (instancetype)customLablWithFrame:(CGRect)frame andTitle:(NSString *)text andFont:(UIFont *)font
{
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    label.text = text;
    label.font = font;
    
    return label;
}

- (CGSize)multipleLinesSizeWithLineSpacing:(CGFloat)lineSpacing andViewWidth:(CGFloat)viewWidth
{
    self.numberOfLines = 0;
    NSString *text = self.text;
    
    if ([text containsString:@"\n"]) {
        
        NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:text];
        NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = NSTextAlignmentJustified;
        [paragraphStyle setLineSpacing:lineSpacing];
        [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];
        NSArray *textArr = [text componentsSeparatedByString:@"\n"];
        CGFloat allRealHeight = 0;
        
        for(int i = 0; i < textArr.count; i++){
            NSString *text = textArr[i];
            if (text.length == 0) {
                text = @"oneLine";
            }
            
            CGFloat oneRowHeight = [@"oneLine" sizeWithAttributes:@{NSFontAttributeName:self.font}].height;
            CGSize textSize = [text boundingRectWithSize:CGSizeMake(viewWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.font} context:nil].size;
            CGFloat rows = ceil(textSize.height / oneRowHeight);
            CGFloat realHeight;
            realHeight = (rows * oneRowHeight) + (rows - 1) * lineSpacing;
            allRealHeight += realHeight;
        }
        allRealHeight += (textArr.count - 1) * lineSpacing;
        
        [self setAttributedText:attributedString1];
        return CGSizeMake(viewWidth, allRealHeight);
    }else{
        CGFloat oneRowHeight = [text sizeWithAttributes:@{NSFontAttributeName:self.font}].height;
        CGSize textSize = [text boundingRectWithSize:CGSizeMake(viewWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.font} context:nil].size;
        NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:text];
        NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = NSTextAlignmentJustified;
        [paragraphStyle setLineSpacing:lineSpacing];
        [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];
        
        CGFloat rows = textSize.height / oneRowHeight;
        CGFloat realHeight = oneRowHeight;
        if (rows > 1) {
            realHeight = (rows * oneRowHeight) + (rows - 1) * lineSpacing;
        }
        [self setAttributedText:attributedString1];
        return CGSizeMake(textSize.width, realHeight);
    }
    
}

@end

第二步,定义文本自适应行间距接口,其实和上面接口类似 【因为即使cell高度的时候,我们还没有UILabel,所有要用文本接口】

//  UIKitTool.h
#import <Foundation/Foundation.h>

@interface UIKitTool : NSObject
//计算带有行间距的文本大小
+ (CGSize)multipleLinesSizeWithLineSpacing:(CGFloat)lineSpacing andViewWidth:(CGFloat)viewWidth andText:(NSString*)text andFont:(UIFont*)font;

@end

//  UIKitTool.m
#import "UIKitTool.h"
@implementation UIKitTool
+ (CGSize)multipleLinesSizeWithLineSpacing:(CGFloat)lineSpacing andViewWidth:(CGFloat)viewWidth andText:(NSString*)text andFont:(UIFont*)font
{
    if([text containsString:@"\n"]){
        NSArray *textArr = [text componentsSeparatedByString:@"\n"];
        CGFloat allRealHeight = 0;
        for(int i = 0; i < textArr.count; i++){
            NSString *text = textArr[i];
            if (text.length == 0) {
                text = @"oneLine";
            }
            CGFloat oneRowHeight = [@"oneLine" sizeWithAttributes:@{NSFontAttributeName:font}].height;
            CGSize textSize = [text boundingRectWithSize:CGSizeMake(viewWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size;
            NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:text];
            NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
            paragraphStyle.alignment = NSTextAlignmentJustified;
            [paragraphStyle setLineSpacing:lineSpacing];
            [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];
            
            CGFloat rows = ceil(textSize.height / oneRowHeight);
            CGFloat realHeight;
            realHeight = (rows * oneRowHeight) + (rows - 1) * lineSpacing; //
            
            allRealHeight += realHeight;
        }
        allRealHeight += (textArr.count - 1) * lineSpacing;
        
        return CGSizeMake(viewWidth, allRealHeight);
       
    }else{
        CGFloat oneRowHeight = [text sizeWithAttributes:@{NSFontAttributeName:font}].height;
        CGSize textSize = [text boundingRectWithSize:CGSizeMake(viewWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size;
        NSMutableAttributedString * attributedString1 = [[NSMutableAttributedString alloc] initWithString:text];
        NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = NSTextAlignmentJustified;
        [paragraphStyle setLineSpacing:lineSpacing];
        [attributedString1 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];
        
        CGFloat rows = textSize.height / oneRowHeight;
        CGFloat realHeight = oneRowHeight;
        if (rows > 1) {
            realHeight = (rows * oneRowHeight) + (rows - 1) * lineSpacing;
        }
        //    [self setAttributedText:attributedString1];
        return CGSizeMake(textSize.width, realHeight);
    }
}
@end

第三步,如下使用即可

//  NewFlowerTableViewCell.h
#define sendWord_lineSpace 4

#import <UIKit/UIKit.h>
@interface NewFlowerTableViewCell : UITableViewCell

- (void)config:(id)model;
+ (CGFloat)cellHeightWithModel:(id)model;

@end

//  NewFlowerTableViewCell.m

@implementation NewFlowerTableViewCell

- (void)layoutAllView:(id )model
{
    NSString *sendWord = @"寄语:该护士很体贴,该护士很体贴,该护士很体贴,该护士很体贴,";
   //////

    //寄语
    if ([sendWord length] > 0) {
        yPos = tempLabel.bottom + sendWord_uMargin;
        tempLabel = _sendWordL;

        CGSize size = [tempLabel multipleLinesSizeWithLineSpacing:sendWord_lineSpace andViewWidth:width];
        height = size.height;
        frame = CGRectMake(xPos, yPos, width, height);
        _sendWordL.frame = frame;
    }
/////
}
+ (CGFloat)cellHeightWithModel:(id)model
{
    NSString *sendWord = @"寄语:该护士很体贴,该护士很体贴,该护士很体贴,该护士很体贴,";


    ////////
    //寄语:
    if ([sendWord length] > 0) {
        NSString *sendStr = [NSString stringWithFormat:@"寄语:%@",sendWord];
        CGSize size = [UIKitTool multipleLinesSizeWithLineSpacing:sendWord_lineSpace andViewWidth:width andText:sendStr andFont:[self getSendWordFont]];
        height += sendWord_uMargin + size.height;
    }
   /////////

    return height;
}

@end

2017年3月5日
一.输出可以变色的文本
1.效果:


Paste_Image.png

2.实现:

//注意str格式 @"题目 %ld / %lu"
- (NSMutableAttributedString *)getChangeColorText:(NSInteger)showNum andTotalNum:(NSUInteger)totalNum
{
    NSString *part1 = @"题目";
    NSString *part2 = [NSString stringWithFormat:@" %ld",showNum];
    NSString *part3 = [NSString stringWithFormat:@" / %lu",totalNum];
    NSInteger len1 = part1.length;
    NSInteger len2 = part2.length;
    NSInteger len3 = part3.length;

    NSString *str = [NSString stringWithFormat:@"%@%@%@",part1,part2,part3];
    NSMutableAttributedString *attributedStr = nil;

    NSInteger length = len1;
    NSInteger index = 0;
    attributedStr = [[NSMutableAttributedString alloc] initWithString:str];
    [attributedStr addAttribute:NSForegroundColorAttributeName
                          value:[HuConfigration uiColorFromString:@"#666666"]
                          range:NSMakeRange(index, length)];

    index = index + length;
    length = len2;
    [attributedStr addAttribute:NSForegroundColorAttributeName
                          value:[HuConfigration uiColorFromString:@"#3DC92B"]
                          range:NSMakeRange(index, length)];

    index = index + length;
    length = len3;
    [attributedStr addAttribute:NSForegroundColorAttributeName
                          value:[HuConfigration uiColorFromString:@"#4D94E2"]
                          range:NSMakeRange(index, length)];

    return attributedStr;
}

或者

{
//        _summaryL.text = [NSString stringWithFormat:@"全部%@题,正确%@题,错误%@题",model.total,model.successCount,model.failCount];
        //变色效果
        NSString *str = [NSString stringWithFormat:@"全部%@题,正确%@题,错误%@题",model.total,model.successCount,model.failCount];
        NSMutableAttributedString *attributedStr = nil;
        attributedStr = [[NSMutableAttributedString alloc] initWithString:str];

        NSString *part1 = [NSString stringWithFormat:@"全部%@题,正确",model.total];
        NSString *part2 = [NSString stringWithFormat:@"%@",model.successCount];
        NSInteger index = part1.length;
        NSInteger length = part2.length;
        [attributedStr addAttribute:NSForegroundColorAttributeName
                              value:[HuConfigration uiColorFromString:@"#3DC92B"]
                              range:NSMakeRange(index, length)];

        part1 = [NSString stringWithFormat:@"全部%@题,正确%@题,错误",model.total,model.successCount];
        part2 = [NSString stringWithFormat:@"%@",model.failCount];
        index = part1.length;
        length = part2.length;
        [attributedStr addAttribute:NSForegroundColorAttributeName
                              value:[HuConfigration uiColorFromString:@"#FF513C"]
                              range:NSMakeRange(index, length)];

        _summaryL.attributedText = attributedStr;
}

3.使用

    _topRightLabel.attributedText = [self getChangeColorText:showNum andTotalNum:totalNum];

    UILabel *tmpLabel = _topRightLabel;
    CGSize size = [tmpLabel.text sizeWithAttributes: @{NSFontAttributeName:tmpLabel.font}];
    tmpLabel.frame = CGRectMake(0, 0, size.width, size.height);

2017年2月5日
1.文本的frame设置
1.1根据文本字体大小设置 文本的frame

CGSize size = [tmpLabel.text sizeWithAttributes: @{NSFontAttributeName:tmpLabel.font}];
        tmpLabel.frame = CGRectMake(xPos, yPos, viewWidth, size.height);

1.2也可以先让文本自适应

    _title = [[UILabel alloc] initWithFrame:CGRectZero];
    _title.numberOfLines = 1;
    _title.textColor = msg_title_color;
    _title.font = msg_title_font;
     _title.text = [attachment title];
    [_title sizeToFit];
    [self addSubview:_title];

2016年3月2日
1.文本居中

_summaryL.textAlignment = NSTextAlignmentCenter;

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

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

推荐阅读更多精彩内容