【发布时间】:2016-03-27 13:57:34
【问题描述】:
我需要计算可能是英文/表情符号/其他语言的给定文本的帧大小。
我的做法是:
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByWordWrapping];
NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:fontSize], NSParagraphStyleAttributeName: style};
CGSize rect = [text boundingRectWithSize:CGSizeMake(containerWidth, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingUsesFontLeading
attributes:attributes
context:nil].size;
只要我不使用表情符号,它就可以正常工作。表情符号行高/字体大小似乎与常规字体不同。
我看到人们尝试以不同的方式解决它,例如: http://youbbe.xyz/issue/4987325/ios-emoji-messed-up-in-uilabel
此解决方案适用于表情符号,但不适用于英文/其他字体。
查看示例图片:
如您所见,仅文本计算良好(第一个框),但文本+表情符号计算不正确(第二个框)。
我真的很惊讶这个问题没有简单的解决方案。 非常感谢您的帮助。
【问题讨论】:
-
尝试使用以下函数,但您必须使用发送属性文本和 TextVew 的宽度,并且函数返回 textview 的高度
- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width { UITextView *textView = [[UITextView alloc] init]; [textView setAttributedText:text]; CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)]; //textView.textContainerInset = UIEdgeInsetsZero; return size.height+10; } -
看看这个..article
-
什么是
containerWidth?你在哪里设置?实际设置标签框架的代码是什么样的? -
你试过 UITextView 和 sizeToFit() 吗?
-
尝试使用 textView,我完全没有问题,而且我认为它不会对您产生太大影响...
标签: ios objective-c uilabel emoji