Как получить размер NSString, когда NSString включает в себя эмодзи?
Я сейчас пользуюсь
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
чтобы получить размер NSString. Однако, когда эта строка содержит эмодзи, кажется, что она вычисляет размер буквального символа Юникод, а не учитывает размер самого смайлика, что делает возвращаемый размер неверным.
Как правильно получить размер строки с символами эмодзи, как это будет выглядеть в uilabel?
2 ответа
NSString не представляет смайликов, он представляет строку, поэтому sizeWithFont будет учитывать только строку.
Я хотел бы использовать:
CGRect labelFrame = label.frame;
labelFrame.size = [label sizeThatFits:CGSizeMake(100, 9999)];
[label setFrame:labelFrame];
или же
//Alternatively
[label sizeToFit];
Имейте ввиду, что sizeToFit
вызывает sizeThatFits:
метод, так что с точки зрения просто установки метки на нужную высоту sizeThatFits: быстрее и намного проще для глаз.
Некоторое время я боролся с тем же, пытаясь найти несколько решений, включая принятый ответ, который мне не помог. Я решил это путем создания строки NSAttributed с текстом, а затем с помощью метода 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;