10

我目前正在使用

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

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

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

4

2 回答 2

2

NSString 不呈现表情符号,它代表一个字符串,所以 sizeWithFont 将只占字符串。

我会使用:

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

或者

//Alternatively  
[label sizeToFit];

请记住sizeToFit调用该方法的sizeThatFits:方法,因此仅将标签设置为正确的高度,sizeThatFits: 更快,并且在视觉上更容易。

于 2013-04-12T12:21:43.637 回答
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;
于 2014-03-27T23:25:29.837 回答