How to get NSString size when NSString includes emojis?

青春壹個敷衍的年華 提交于 2019-12-01 15:19:18

问题


I am currently using

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

to get the size of an NSString. However, when that string includes emojis, it seems to calculate the size for the literal unicode character rather than taking into account the size of the emoji itself, rendering the returned size incorrect.

How do I correctly get the size of the string with emoji characters, as it will appear in a uilabel?


回答1:


The NSString is not presenting the emoji, it's representing a string, so the sizeWithFont will only account for the string.

I would use:

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

or

//Alternatively  
[label sizeToFit];

Bare in mind that sizeToFit calls the sizeThatFits: method, so in terms of just setting the label to the right height, sizeThatFits: is quicker, and much easier on the eye.




回答2:


I struggled with this same thing for a while, attempting multiple solutions including the accepted answer, which did not work for me. I solved this by creating an NSAttributed String with the text, then using the NSAttributedString method boundingRectWithSize:options:context: to get the size of the 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;


来源:https://stackoverflow.com/questions/15965525/how-to-get-nsstring-size-when-nsstring-includes-emojis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!