根据字体计算CGRect
UILabel *label = [[UILabel alloc]init];
label.numberOfLines = ;//多行显示
label.backgroundColor = [UIColor yellowColor];
label.font = [UIFont systemFontOfSize:];
NSString *string = @"我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国我爱中国";
UIFont *font = [UIFont systemFontOfSize:];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = ;//行间距
NSDictionary *attributes = @{
NSFontAttributeName:font,
NSParagraphStyleAttributeName:paragraphStyle
};//其他属性可以在UIKit的第一个头文件中查看,颜色。。
CGRect size = [string boundingRectWithSize:CGSizeMake(, )
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];//iOS 7.0有效
NSAttributedString *attributeString = [[NSAttributedString alloc]initWithString:string attributes:attributes];//设置属性字体 label.frame = size;
label.attributedText = attributeString;
label.center = self.view.center;
[self.view addSubview:label];
封装的方法:
- (CGSize)textSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
{
CGSize textSize;
if ([XWCHelper isIOS7orHigher]) { if (CGSizeEqualToSize(size, CGSizeZero)) { textSize = [self sizeWithAttributes:@{NSFontAttributeName:font}];
}
else{ NSStringDrawingOptions option = NSStringDrawingUsesLineFragmentOrigin;
//NSStringDrawingTruncatesLastVisibleLine如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。 如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略 NSStringDrawingUsesFontLeading计算行高时使用行间距。(译者注:字体大小+行间距=行高)
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
CGRect rect = [self boundingRectWithSize:size//如果是单行的话,可以用CGSizeZero,如果高发生变化,可以使用CGSizeMake(120,CGFloat_MAX),制定一个无限大的数,让系统根据字体的大小和行距自己识别出高度
options:option
attributes:attributes
context:nil];
textSize = rect.size;
} }
else{ if (CGSizeEqualToSize(size, CGSizeZero)) { textSize =[self sizeWithFont:font];
}
else{ textSize =[self sizeWithFont:font constrainedToSize:size lineBreakMode:lineBreakMode];
}
}
return textSize;
}
实现如下效果:
_friendDetailLabel = [UILabel labelWithFrame:CGRectMake( + + , _inviteFriendBtn.bottom + , , ) text:@"" textColor:RGBColor(,,) textAlignment:NSTextAlignmentLeft font:Arial()];
_friendDetailLabel.numberOfLines = ;
NSString *str = @"好友使用你的推荐码注册,TA可获得5元红包!你可获得2元推广奖励!";
//设置属性
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = ;//行间距
NSDictionary *attributes = @{
NSFontAttributeName:Arial(),
NSParagraphStyleAttributeName:paragraphStyle
};
//设置可变的副文本为了修改属性
NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc]initWithString:str attributes:attributes];//设置属性字体
//设置修改属性
NSDictionary *attributes1 = @{
NSFontAttributeName:Arial()
};
//设置属性
[attributeString setAttributes:attributes1 range:NSMakeRange(, )];
[attributeString setAttributes:attributes1 range:NSMakeRange(, )];
//计算大小
CGRect size =[attributeString boundingRectWithSize:CGSizeMake(kScreenWidth - - , CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
_friendDetailLabel.width = size.size.width;
_friendDetailLabel.height = size.size.height;
_friendDetailLabel.attributedText = attributeString;
根据字体计算CGRect的更多相关文章
- 这次我好像才真的明白了CSS Rem字体计算的原理
背景 如何按照设计稿中标注的尺寸,直接写页面的样式,不再需要px2rem这样的工具或者人工转换 ? 只要你明白了rem的计算原理,这个问题的答案超级简单. 根字体大小计算核心原理 设备的根字体大小 * ...
- PHP-根据字符串和所用字体计算字符串所占宽高
今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的i ...
- 根据ui控件的字体计算占用的长度
//1.根据icon计算name的长度 CGFloat nameX = CGRectGetMaxX(_icon.frame) + kBorder; CGFloat nameY = iconY; //计 ...
- iOS开发小技巧--计算label的Size的方法总结
计算label的Size方法 sizeWithAttributes:方法 适用于不换行的情况,宽度不受限制的情况 /// 根据指定文本和字体计算尺寸 - (CGSize)sizeWithText:(N ...
- iOS 动态计算文本内容的高度
关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. // 获取字符串的大小 ios6 - (CGSize)getStringRect_:(NSString* ...
- iOS7中计算UILabel中字符串的高度
iOS7中计算UILabel中字符串的高度 iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下: UIL ...
- 探究为何rem在chrome浏览器上计算出错
最近在一个项目中,测试同学提了一个bug,说手机上有个页面的某些字体显示偏大.就像这样 我用chrome浏览器在pc上测试了一下,发现pc上也有这个问题,但是用其它浏览器打开这个页面就没有发现这个问题 ...
- JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决
textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...
- ios开发之--使用UILabel Category 计算UILabel内容大小
在此仅做记录,代码如下:
随机推荐
- 软件工程(FZU2015)赛季得分榜,第一回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- git-添加公钥
安装完git后,打开开git bush 输入以下命令 git config --global user.name "Your Name" git config --global u ...
- SmohanTimeLine.js 酷炫的时间轴效果
展示地址 点此下载 原文出处 一.参数说明 item : '.item', //项目元素 top : 30, //与下一行的间距 pointWidth : 22, //时间点宽度 cornerWidt ...
- wpf 获取datagrid中模板中控件
//获取name为datagrid中第三列第一行模板的控件 FrameworkElement item = dataGrid.Columns[].GetCellContent(dataGrid.Ite ...
- js分页小结
今天解决了JS分页的问题1 页码 给每页的内容套一个相同的类名 通过选择器加上.length或者.size() 来获得总页数2当前页的页码可以使用each(function(index,DOMsss ...
- 【转】Controllers and Routers in ASP.NET MVC 3
Controllers and Routers in ASP.NET MVC 3 ambilykk, 3 May 2011 CPOL 4.79 (23 votes) Rate: vote 1vote ...
- rsync快速删除海量文件
rsync --delete-before -avH --progress --stats /tmp/empty/ /var/spool/postfix/maildrop/ 由于业务侧使用时,一些脚本 ...
- Npoi导入导出Excel操作
之前公司的一个物流商系统需要实现对订单的批量导入和导出,翻阅了一些资料,最后考虑使用NPOI实现这个需求. 在winform上面实现excel操作:http://www.cnblogs.com/Cal ...
- MySql 里的IFNULL、NULLIF和ISNULL用法区别
mysql中isnull,ifnull,nullif的用法如下: isnull(expr) 的用法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0. mysql> ...
- 14个技巧助你适配 iOS10
1.Notification(通知) 自从 Notification 被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到 Us ...