NSString包含表情符号时如何获得NSString大小?

时间:2013-04-12 07:29:09

标签: iphone ios objective-c nsstring emoji

我目前正在使用

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

获取NSString的大小。但是,当该字符串包含表情符号时,它似乎计算文字unicode字符的大小,而不是考虑表情符号本身的大小,使得返回的大小不正确。

如何使用表情符号正确获取字符串的大小,因为它会出现在uilabel中?

2 个答案:

答案 0 :(得分:2)

NSString没有呈现表情符号,它表示一个字符串,因此sizeWithFont只会考虑字符串。

我会用:

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

//Alternatively  
[label sizeToFit];

请注意sizeToFit调用sizeThatFits:方法,因此只需将标签设置为正确的高度,sizeThatFits:就会更快,更容易实现。

答案 1 :(得分:1)

我在同样的事情上挣扎了一段时间,尝试了多种解决方案,包括接受的答案,这对我不起作用。我通过创建带有文本的NSAttributed String来解决这个问题,然后使用NSAttributedString方法boundingRectWithSize:options:context:来获取字符串的大小。

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;