Obtenga la altura NSString

Tengo un NSString, y quiero saber su altura para crear un UILabel apropiado.

Haciendo esto

NSString *string = @"this is an example"; CGSize size = [string sizeWithFont:[UIFont systemFontOfSize:10.0f] forWidth:353.0 lineBreakMode:UILineBreakModeWordWrap]; float height = size.height; 

La altura es ahora de 13.0. Si uso esta cadena

 NSString *string = @"this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example this is an example "; 

la altura es siempre 13.0 (y con 353 como ancho, eso es imposible) … ¿qué estoy haciendo mal?

AÑADIR:

 size.width; 

funciona bien … así que es como si el lineBreakMode no es correcto … pero lo es, ¿no es así?

La razón por la que lo que estás haciendo no funciona como era de esperar es porque

 – sizeWithFont:forWidth:lineBreakMode: 

es para "Métricas de computación para una sola línea de text", mientras que

 -sizeWithFont:constrainedToSize:lineBreakMode: 

es para "Métricas de computación para múltiples líneas de text". De la documentation :

Métricas de cómputo para una sola línea de text

 – sizeWithFont: – sizeWithFont:forWidth:lineBreakMode: – sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode: 

Métricas de computación para múltiples líneas de text

 – sizeWithFont:constrainedToSize: – sizeWithFont:constrainedToSize:lineBreakMode: 

Intente usar -sizeWithFont:constrainedToSize:lineBreakMode: lugar, por ejemplo, esto es lo que suelo hacer:

 CGSize maximumLabelSize = CGSizeMake(353,9999); CGSize expectedLabelSize = [string sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:label.lineBreakMode]; CGRect newFrame = label.frame; newFrame.size.height = expectedLabelSize.height; label.frame = newFrame; 

De acuerdo con la documentation

Este método devuelve el ancho y alto de la cadena restringida al ancho especificado. Aunque calcula dónde se producirían los saltos de línea, este método en realidad no envuelve el text en líneas adicionales. Si el tamaño de la cadena excede el ancho dado, este método trunca el text (solo para propósitos de layout) utilizando el modo de salto de línea especificado hasta que se ajuste al ancho máximo; luego devuelve el tamaño de la cadena truncada resultante .

Debería usar – [NSString sizeWithFont: constrainedToSize: lineBreakMode:] que tiene un comportamiento similar, pero puede utilizar CGFLOAT_MAX como la altura en el tamaño pasado.