NSString(或者说是UILabel)加入 “行间距” 之后的 “高度”计算
一、首先,写一个工具类(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)加入 “行间距” 之后的 “高度”计算的更多相关文章
- (转载)iOS UILabel自定义行间距时获取高度
本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...
- iOS UILabel自定义行间距时获取高度
本文介绍一下自定义行间距的UILabel的高度如何获取,需要借助一下开源的UILabel控件:TTTAttributedLabel 附下载地址 https://github.com/TTTAttrib ...
- iOS 设置UILabel的行间距并自适应高度
NSString *contentStr = @"总以为,在最初的地方,有一个最原来的我,就也会有一个最原来的你"; UILabel *tempLabel = [[UILabel ...
- UILabel设置行间距和字间距并计算高度-b
#define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...
- (转)iOS学习——UIlabel设置行间距和字间距
在iOS开发中经常会用到UIlabel来展示一些文字性的内容,但是默认的文字排版会觉得有些挤,为了更美观也更易于阅读我们可以通过某些方法将UIlabel的行间距和字间距按照需要调节. 比如一个Labe ...
- 修改UILabel的行间距
在iOS开发中 有时候为了调整一些UI效果 我们需要调整UILabel之间的行间距: contentLabel.text:label上显示的文字内容; 5:label行间距; contentLab ...
- UILabel设置行间距
UILabel设置行间距: NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWi ...
- label_设置行距、字距及计算含有行间距的label高度
// // ViewController.m // CNBlogs // // Created by PXJ on 16/5/27. // Copyright © 2016年 PXJ. All ...
- IOS开发调整UILabel的行间距
CGFloat heih = 20; NSString * cLabelString = @"这是测试UILabel行间距的text.这是测试UILabel行间距的text.n 这是测试 ...
随机推荐
- Jquery和JS获取ul中li标签
js 获取元素下面所有的li var content=document.getElementById("content"); var items=content.getElemen ...
- Drawing Arc Using ArcSegment in XAML
We can use the Arc XAML element to draw arcs in XAML. Besides drawing arcs using the Arc element, we ...
- Oracle错误 ORA-12560如何解决
造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:1.监听服务没有起起来.windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板, 启动oracleh ...
- linux下查找可执行文件
linux下查找可执行文件 ls -F|grep "*" 我们来看看ls -F的作用: -F开关对可执行文件添加一个*号,为目录添加一个/号,为符号链接添加一个@号. http:/ ...
- iOS学习26之UINavigationController
1. UINavigationController 1> 概述 UINavigationController : 导航控制器, 是 iOS 中最常用的多视图控制器之一, 用它来管理多个视图控制器 ...
- 熟悉熟悉常用的几个算法用JS的实现
(1)数组去重 原理:定义一个对象obj,然后把数组元素作为obj的属性名,利用属性名是否重复进行判重 1 var unique = function(arr){ 2 let obj = {}; 3 ...
- ACM 盗梦空间
盗梦空间 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 <盗梦空间>是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中 ...
- HDU - The number of divisors(约数) about Humble Numbers
Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The sequence ...
- [Cocos2D-x For WP8]Sprite精灵
精灵(Sprite)是游戏里面的角色,比如敌人,游戏里面运动的物体等等,所以精灵是游戏里面一个非常常见的概念,几乎无处不在.在Cocos2D-x里面精灵是用CCSprite类来进行表示的,它可以用一张 ...
- eclipse配置PHP开发环境
下载 http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK,Eclipse 安装需要JDK环境:http:// ...