¿Cómo get el tamaño de NSString cuando NSString incluye emojis?

Actualmente estoy usando

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

para get el tamaño de un NSString. Sin embargo, cuando esa cadena incluye emojis, parece calcular el tamaño del carácter unicode literal en lugar de tener en count el tamaño del emoji en sí mismo, lo que hace que el tamaño devuelto sea incorrecto.

¿Cómo obtengo correctamente el tamaño de la cadena con caracteres emoji, ya que aparecerá en una uilabel?

El NSString no presenta el emoji, representa una cadena, por lo que sizeWithFont solo contabilizará la cadena.

Yo usaría:

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

o

 //Alternatively [label sizeToFit]; 

sizeToFit en count que sizeToFit llama al método sizeThatFits: por lo tanto, en términos de simplemente establecer la label a la altura correcta, sizeThatFits: es más rápido y mucho más fácil para el ojo.

Luché con esto durante un time, intentando varias soluciones, incluida la respuesta aceptada, que no funcionó para mí. Resolví esto creando una cadena NSAttributed con el text, luego usando el método NSAttributedString boundingRectWithSize: options: context: para get el tamaño de la cadena.

 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;