我目前正在使用
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
获取NSString的大小。但是,当该字符串包含表情符号时,它似乎计算文字unicode字符的大小,而不是考虑表情符号本身的大小,使得返回的大小不正确。
如何使用表情符号正确获取字符串的大小,因为它会出现在uilabel中?
答案 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;