根据字体计算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内容大小
在此仅做记录,代码如下:
随机推荐
- 使用apache ftpserver搭建ftp服务器
作为一个javaer,遇到任何问题,先查一下java中的解决方案.地球上的许多事情,在java中都能找到完美的解决方案.之前搭建ftp服务器使用的是vsftpd,现在可以把它卸掉了,它以服务的形式运行 ...
- 【好玩的前端知识】 Kube
Kube javascript tools
- 通过CAGradientLayer制作渐变色效果(转)
转载自:http://blog.it985.com/7986.html 看了极客学院的视频之后写的一篇博客,觉得不错,还是作为笔记使用. 简单介绍一下CAGradientLayer吧. Gradien ...
- Unable to load R3 module D:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 (VERR_UNRESOLVED_ERROR).
Unable to load R3 module D:\Program Files\Oracle\VirtualBox/VBoxDD.DLL (VBoxDD): GetLastError=1790 ( ...
- zookeeper系列之通信模型(转)
本文的主题就是讲解Zookeeper通信模型,本节将通过一个概要图来说明Zookeeper的通信模型. Zookeeper的通信架构 在Zookeeper整个系统中,有3中角色的服务,client.F ...
- Leetcode 144. Binary Tree Preorder Traversal
参考例子:[8,3,1,6,4,7,10,14,13] 8,3,1 和 6,4 说明从root开始,沿着左臂向下寻找leaf 的过程中应该逐个将node.val push入ans. class Sol ...
- 洛谷P2434 [SDOI2005]区间
题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...
- BigDecimal 加减乘除
BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5&quo ...
- oracle--知识点汇总2---laobai
--复制表 create table emp as(select * from scott.emp); select * from emp; --Demo1创建存储过程,实现将emp表comm为空时, ...
- css之图片路径
关于背景图片url路径:图片和调用文件在两个不同根下的(不在同一个包(文件夹)中),要用相对路径,举例"../images/cq.gif":图片和调用文件是在一个根下的直接孩子,用 ...