boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string
来源:互联网 发布:神机妙算软件介绍 编辑:程序博客网 时间:2024/04/30 01:36
iOS的文字高度计算一直是个问题, 苹果也一直在改, 这几天看了一下 boundingRectWithSize 方法.
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0);
踩了几个坑后, 总算找到比较好的使用方法.
参考: http://stackoverflow.com/questions/13621084/boundingrectwithsize-for-nsattributedstring-returning-wrong-size
使用时的注意事项:
1: NSAttributedString 的每个部分都要至少设置两个属性:
NSFontAttributeName
NSForegroundColorAttributeName
2: NSStringDrawingOptions 的值, 在多行的情况下, 至少要有
NSStringDrawingUsesLineFragmentOrigin
NSStringDrawingUsesFontLeading
3: 如果文字中可能会出现emoji表情的话, emoji的高度比文字要高一点点,
我的方便是简单的在高度基础上加了两个像素.
(用CoreText可能会好一些, 但相对复杂.)
附代码:
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:fullDescAndTagStr];NSRange allRange = [fullDescAndTagStr rangeOfString:fullDescAndTagStr];[attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13.0] range:allRange];[attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:allRange];NSRange destRange = [fullDescAndTagStr rangeOfString:tagStr];[attrStr addAttribute:NSForegroundColorAttributeName value:HEXCOLOR(0x009cdd) range:destRange];CGFloat titleHeight;NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX) options:options context:nil];titleHeight = ceilf(rect.size.height);return titleHeight+2; // 加两个像素,防止emoji被切掉.
0 0
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string.
- UILable的使用,文本高度的计算boundingRectWithSize
- 使用boundingRectWithSize计算内容高度的坑
- 使用boundingRectWithSize计算内容高度的坑
- boundingRectWithSize 的使用,计算Label高度
- 使用boundingRectWithSize计算内容高度的
- iOS 使用 boundingRectWithSize: 计算 UILabel 高度错误的解决方案
- UIKit-boundingRectWithSize计算多行UILabel的文字高度
- 计算动态UILable的高度
- boundingRectWithSize 动态计算文字的高度
- boundingRectWithSize计算label 高度
- 计算UILable格式内容的高度
- IOS7中动态计算UILable的高度
- boundingRectWithSize计算高度不准确
- boundingRectWithSize计算高度不准确
- boundingRectWithSize 7.0以后计算文本高度的方法
- IOS BUG记录 boundingRectWithSize计算内容宽度高度的问题
- (7.1.2)数据库原理之关系规范化
- java.io.FileNotFoundException: /mnt/sdcard/xxxx.mp3
- 原型污染和猴子补丁 Prototype Pollution and Monkey-Patching
- java 对称加密——密钥与加密后的数据存盘方式
- Macbook Vim高亮
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string
- java快速排序
- caffe架构学习之(一)--基于google protocol buffer开源项目的深度网络定义
- 第四周 项目一-三角形类的构造函数(二)
- 山寨免费软件的阴谋!
- 终于找到了-----------让工资再涨的编程方式
- 将ppt文件如何转换成pdf文件
- Redirecting携带数据
- 优化实例内存