根据字体计算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内容大小
在此仅做记录,代码如下:
随机推荐
- SQL数据库分配权限
打开SQL-Server管理工具->安全性->登陆名->右键(新建登陆名) 输入相应的信息(这里要去掉强制实施密码策略,强制密码过期,否则用户在下次登录时必须修改密码) 用户映射-& ...
- matlab 将多个盒图放在一张图上
1.boxplot 将多个盒图放在一张图上 x1 = normrnd(5,1,100,1)';x2 = normrnd(6,1,200,1)';X = [x1 x2];G = [zeros(size( ...
- Jquery揭秘系列:实现 ready和bind事件
讲这一节之前,先回顾之前的一篇<小谈Jquery>里面的代码: (function (win) { var _$ = function (selector, context) { retu ...
- hashlib 和 hmac
import hashlib hash = hashlib.md5([bytes('SALT_STRING', encoding='utf-8’)]) #SALT_STRING :加盐 hash.up ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- 深入理解图优化与g2o:g2o篇
内容提要 讲完了优化的基本知识,我们来看一下g2o的结构.本篇将讨论g2o的代码结构,并带着大家一起写一个简单的双视图bundle adjustment:从两张图像中估计相机运动和特征点位置.你可以把 ...
- 分布式服务框架dubbo原理解析(转)
libaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个框架/工具/产品 ...
- shell命令lsof
PREFACE linux一切皆是文件,共有7中文件类型 1.普通文件(regular file) 2.目录文件(directory file) 3.块特殊文件(block special file) ...
- ionic ios 左滑 白屏
之前发现ionic在发布ios之后,左滑屏幕的时候会出现界面变白,但是画面原有的位置点击还是有效的,但是点击之后界面是不正确的,返回到上上一步 然后查找资料发现是ios系统内置的左滑动作造成了影响,修 ...
- Linux的inode的理解
文件名 -> inode -> device block 一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"( ...