boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string.
2014-09-04 12:05
417 查看
iOS的文字高度计算一直是个问题, 苹果也一直在改, 这几天看了一下 boundingRectWithSize 方法.
踩了几个坑后, 总算找到比较好的使用方法.
参考: http://stackoverflow.com/questions/13621084/boundingrectwithsize-for-nsattributedstring-returning-wrong-size
使用时的注意事项:
1: NSAttributedString 的每个部分都要至少设置两个属性:
NSFontAttributeName
NSForegroundColorAttributeName
2: NSStringDrawingOptions 的值, 在多行的情况下, 至少要有
NSStringDrawingUsesLineFragmentOrigin
NSStringDrawingUsesFontLeading
3: 如果文字中可能会出现emoji表情的话, emoji的高度比文字要高一点点,
我的方便是简单的在高度基础上加了两个像素.
(用CoreText可能会好一些, 但相对复杂.)
附代码:
- (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被切掉.
相关文章推荐
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string.
- UILable的使用,文本高度的计算boundingRectWithSize
- 使用boundingRectWithSize计算内容高度的坑
- 使用boundingRectWithSize计算内容高度的坑
- 使用boundingRectWithSize计算内容高度的
- iOS 使用 boundingRectWithSize: 计算 UILabel 高度错误的解决方案
- 计算label的高度:boundingRectWithSize的使用
- boundingRectWithSize 的使用,计算Label高度
- iOS:(boundingRectWithSize)按大小计算字符串高度
- iOS7 中 boundingRectWithSize:options:attributes:context:计算文本尺寸的使用
- boundingRectWithSize计算高度不准确
- IOS8.4下用- (CGRect)boundingRectWithSize: options: attributes: context:计算文本高度会崩溃的问题
- boundingRectWithSize计算label 高度
- boundingRectWithSize:options:attributes:context:计算尺寸的使用
- boundingRectWithSize计算高度不准确
- iOS NSAttributeString 通过boundingRectWithSize 获取高度不准确问题
- iOS 字符串长度计算boundingRectWithSize遇到 " \r\n"的时候,后面的字符串长度返回0 在swift中使用pod导入第三方库时,注意事项
- 关于用boundingRectWithSize计算label自适应高度那点事
- iOS7 中 boundingRectWithSize:options:attributes:context:计算文本尺寸的使用