NSString包含emojis时如何获得NSString的大小?

我目前正在使用

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 

得到一个NSString的大小。 但是,如果该string包含表情符号,它似乎会计算文字unicode字符的大小,而不是考虑表情符号本身的大小,使返回的大小不正确。

如何正确地获取string的大小与表情符号,因为它会出现在一个uilabel?

NSString不会呈现表情符号,它代表一个string,所以sizeWithFont只会占用string。

我会用:

 CGRect labelFrame = label.frame; labelFrame.size = [label sizeThatFits:CGSizeMake(100, 9999)]; [label setFrame:labelFrame]; 

要么

 //Alternatively [label sizeToFit]; 

请记住, sizeToFit调用sizeThatFits:方法,因此sizeThatFits:标签设置到正确的高度而言,sizeThatFits:更快,更容易。

我在这个问题上苦苦挣扎了一段时间,尝试了多种解决scheme,包括接受的答案,这对我来说并不合适。 我通过创build一个带有文本的NSAttributedstring来解决这个问题,然后使用NSAttributedString方法boundingRectWithSize:options:context:来获取string的大小。

 NSString *text = //some text CGFloat maxSize = //text size constraints NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName : font }]; CGRect boundingRect = [attributedString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; CGSize fitSize = boundingRect.size;