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的更多相关文章

  1. 这次我好像才真的明白了CSS Rem字体计算的原理

    背景 如何按照设计稿中标注的尺寸,直接写页面的样式,不再需要px2rem这样的工具或者人工转换 ? 只要你明白了rem的计算原理,这个问题的答案超级简单. 根字体大小计算核心原理 设备的根字体大小 * ...

  2. PHP-根据字符串和所用字体计算字符串所占宽高

    今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的i ...

  3. 根据ui控件的字体计算占用的长度

    //1.根据icon计算name的长度 CGFloat nameX = CGRectGetMaxX(_icon.frame) + kBorder; CGFloat nameY = iconY; //计 ...

  4. iOS开发小技巧--计算label的Size的方法总结

    计算label的Size方法 sizeWithAttributes:方法 适用于不换行的情况,宽度不受限制的情况 /// 根据指定文本和字体计算尺寸 - (CGSize)sizeWithText:(N ...

  5. iOS 动态计算文本内容的高度

    关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. //  获取字符串的大小  ios6 - (CGSize)getStringRect_:(NSString* ...

  6. iOS7中计算UILabel中字符串的高度

    iOS7中计算UILabel中字符串的高度 iOS7中出现了新的方法计算UILabel中根据给定的Font以及str计算UILabel的frameSize的方法.本人提供category如下: UIL ...

  7. 探究为何rem在chrome浏览器上计算出错

    最近在一个项目中,测试同学提了一个bug,说手机上有个页面的某些字体显示偏大.就像这样 我用chrome浏览器在pc上测试了一下,发现pc上也有这个问题,但是用其它浏览器打开这个页面就没有发现这个问题 ...

  8. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决

    textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...

  9. ios开发之--使用UILabel Category 计算UILabel内容大小

    在此仅做记录,代码如下:

随机推荐

  1. Learning to rank 特征抽取

    http://blog.csdn.net/puqutogether/article/details/42124491 http://www.microsoft.com/en-us/research/p ...

  2. mac下 tomcat8+jdk1.8+servlet+Spring环境搭建中的问题

    1,jdk1.8里面自带了servlet-api.jar tomcat里面也有这个,会导致冲突发生.出现这个问题会在控制台输出一大堆警告和错误,我一个一个去查(有的错误是表象不是核心)最后在stack ...

  3. Thinking in java学习笔记之String的不可变性

    为了提高效率,可以使用StringBuffer或StringBuilder 1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与 ...

  4. css基于绝对定位的垂直水平居中技术

    翻译:http://blog.csdn.net/freshlover/article/details/11579669 原文:http://coding.smashingmagazine.com/20 ...

  5. 自定义Docker容器的 hostname

    自定义Docker容器的 hostname   作者: John Deng 原创内容,欢迎传播,请注明出处:http://www.cnblogs.com/johnd/p/set-docker-host ...

  6. WinForm------GridControl添加底部合计框

    1.在GridView属性中找到"OptionsView" => "ShowFooter" = true 2.打开编辑器,如图 . 3.获取统计数据(注意 ...

  7. Thinkphp中controller控制器根据curl函数请求数据

    public function member(){ $url="http://aitequn.tjnit.com/UserAction_findAllUser"; $ch =cur ...

  8. Linux--niaoge

    鸟哥的Linux私房菜 网络基础: 那 TCP/IP 是如何运作的呢?我们就拿妳常常连上的 Yahoo 入口网站来做个说明好了,整个联机的状态可以这样看: 应用程序阶段:妳打开浏览器,在浏览器上面输入 ...

  9. rpm---linux软件安装与管理

    linux的安装命令选项太多,整理一下,方便后期查找. 汇总: install: rpm -ivh 包全名 安装 upgrade: rpm -Uvh 包全名 升级 erase: rpm -e 包名 删 ...

  10. IOS系统基础知识

    在iOS应用中,每个程序得main函数中都调用了UIApplicationMain函数. 1 2 3 4 5 6 int main(int argc, char *argv[])  {      @a ...