一、首先,写一个工具类(NSString的分类,增加两个功能,计算高度宽度)

#import "NSString+Extension.h"

@implementation NSString (Extension)

#pragma mark -根据宽度,字号来计算字符串的高度
- (float) heightWithFont: (UIFont *) font withinWidth: (float) width{
CGRect textRect = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName:font}
context:nil];
return ceil(textRect.size.height);
} #pragma mark -根据字号来计算字符串的宽度
- (float) widthWithFont: (UIFont *) font{
CGRect textRect = [self boundingRectWithSize:CGSizeMake(MAXFLOAT, font.pointSize) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName:font}
context:nil];
return ceil(textRect.size.width);
}

二、为了适配不同系统,字体字号作如下封装:

/*
* 自定义字号大小
*/
-(UIFont *)jyeFontWithName:(NSString *)name size:(CGFloat)size{
UIFont * font = nil;
if([[[UIDevice currentDevice] systemVersion] floatValue] >= ){
font = [UIFont fontWithName:name size:size];
}else{ if([name rangeOfString:@"Medium"].location == NSNotFound){
font = [UIFont systemFontOfSize:size];
}else{
font = [UIFont boldSystemFontOfSize:size];
}
}
return font;
}

三、在需要计算字符串高度宽度的类中,做如下处理:

   

        NSString *string = @"今日营养配餐提供热量1800千卡,需要饮食之外额外补充钙10mg,铁20mg,锌9.5mg,叶酸200μgDFE,维生素D 10ug,维生素B1 1.2mg,维生素B2 1.2mg。";

        UIFont *font = [self jyeFontWithName:@"PingFangSC-Regular" size:];//需要与UILabel的text保持一致

        CGFloat oneRowHeight = [@"test" sizeWithAttributes:@{NSFontAttributeName:font}].height;//test  只是随便取得一个字符串,只要不超过一行就可以

        CGFloat textHeight = [string heightWithFont:font withinWidth:self.frame.size.width-];

        CGFloat rows = textHeight/oneRowHeight;

        CGFloat realHeight = (rows *ceilf(oneRowHeight)) +(rows - )* LineSpace;//行间距 为4

       //realHeight  就是字符串的高度啦,此时你就可以根据交互设计图编写相应的UILabel的frame啦

四、UILabel 设置行间距

       UILabel * hotLabel = [[UILabel alloc]init];
hotLabel.frame = CGRectMake(, , sectionView.frame.size.width - , realHeight);
hotLabel.textColor = JYEColor(, , );
hotLabel.numberOfLines = ;
hotLabel.font = [self jyeFontWithName:@"PingFangSC-Regular" size:]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
NSRange range = [string rangeOfString:@"今日营养配餐"];
[attributedString addAttribute:NSForegroundColorAttributeName value:JYEColor(, , ) range:range];
[attributedString addAttribute:NSFontAttributeName value:[self jyeFontWithName:@"PingFangSC-Medium" size:] range:range];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:];//调整行间距 [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(, [string length])]; hotLabel.attributedText = attributedString;

NSString(或者说是UILabel)加入 “行间距” 之后的 “高度”计算的更多相关文章

  1. (转载)iOS UILabel自定义行间距时获取高度

    本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...

  2. iOS UILabel自定义行间距时获取高度

    本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...

  3. iOS 设置UILabel的行间距并自适应高度

    NSString *contentStr = @"总以为,在最初的地方,有一个最原来的我,就也会有一个最原来的你"; UILabel *tempLabel = [[UILabel ...

  4. UILabel设置行间距和字间距并计算高度-b

    #define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...

  5. (转)iOS学习——UIlabel设置行间距和字间距

    在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ...

  6. 修改UILabel的行间距

    在iOS开发中  有时候为了调整一些UI效果  我们需要调整UILabel之间的行间距: contentLabel.text:label上显示的文字内容; 5:label行间距; contentLab ...

  7. UILabel设置行间距

    UILabel设置行间距: NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWi ...

  8. label_设置行距、字距及计算含有行间距的label高度

    // //  ViewController.m //  CNBlogs // //  Created by PXJ on 16/5/27. //  Copyright © 2016年 PXJ. All ...

  9. IOS开发调整UILabel的行间距

    CGFloat heih = 20;   NSString * cLabelString = @"这是测试UILabel行间距的text.这是测试UILabel行间距的text.n 这是测试 ...

随机推荐

  1. unity update 和fixedudpate

    但是Update会在每次渲 染新的一帧时被调用. 而FixedUpdate会在每个固定的时间间隔被调用,

  2. 挂载磁盘linux

    1. 用mkfs命令在/dev/sdb上创建ext4文件系统 1.1 mkfs命令 在设备上创建文件系统 mkfs [options] device 参数 device 为要在其上面创建文件系统的设备 ...

  3. 关于Div的宽度与高度的100%设定

    http://www.cnblogs.com/clare-zhang/archive/2011/08/26/2154220.html 正像你所知道的那样,设置DIV大小的有两个属性width和heig ...

  4. Coder-Strike 2014 - Round 1 C. Pattern

    题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...

  5. ACM 另一种阶乘问题

    另一种阶乘问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来 ...

  6. BZOJ 1798 题解

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 5531  Solved: 1946[Submit ...

  7. sql:找出工资第二高的人名

    CREATE TABLE EmpSalaryInfo ( Id ), Name ), Salary int ) ) ) ) ) 方法1 (子查询): name from test where sala ...

  8. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  9. PHP curl 模拟POST 上传文件(含php 5.5后CURLFile)

    <?php /** * Email net.webjoy@gmail.com * author jackluo * 2014.11.21 * */ //* function curl_post( ...

  10. [CareerCup] 15.4 Types of Join 各种交

    15.4 What are the different types of joins? Please explain how they differ and why certain types are ...