2009-09-16 730 views
16

Necesito medir el ancho de píxel de una cadena en Cocoa Touch. ¿Alguien puede indicarme un enlace que explique cómo hacer esto?Medición del ancho de píxel de una cadena

+5

No debe solicitar una respuesta genérica de objetivo-c cuando esta pregunta se trata realmente de funciones en Cocoa para Mac OS X o Cocoa Touch para iPhone OS. Objective-C es solo el lenguaje de programación que usan Cocoa y Cocoa Touch. – PeyloW

+4

¿Hay algún otro uso de Object-C además de la programación para Mac OS o IOS? Si es así, ¿es significativo? –

Respuesta

27

En el iPhone OS es un poco diferente, en su lugar mira el NSString UIKit Additions Reference. La idea es la misma que en Cocoa para Mac OS X, pero hay más métodos.

Para las líneas individuales de uso de texto:

- (CGSize)sizeWithFont:(UIFont *)font 
       forWidth:(CGFloat)width 
     lineBreakMode:(UILineBreakMode)lineBreakMode 

Y para los textos de varias líneas de usar:

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

El uso de un UILineBreakMode como argumento a favor de las líneas individuales de texto puede ser confuso, pero esto es porque el salto de línea también se usa para definir cómo truncar el texto.

+0

Esto parece funcionar bien para las fuentes habituales, pero no parece dar los límites exactos para fuentes como Zapfino. El código de muestra está en http://paste.lisp.org/display/130803 y la captura de pantalla de salida está en http://ScrnSht.com/juixwk. ¿Alguna idea de por qué y cómo resolverlo? – trss

+0

obsoleto en iOS7 ... los documentos no hacen referencia a ningún reemplazo ... ¿hay alguno? – abbood

+0

Los documentos iOS7 actuales (Xcode 5.0.1) se refieren a reemplazos (que suelen ser solo iOS7). – JLundell

5

Eche un vistazo a NSString Application Kit Additions Reference, específicamente . El valor devuelto por esa rutina debería darle el ancho de NSString.

+8

La documentación no es muy clara sobre cómo usar 'boundingRectWithSize: options: attributes:'. Sería bueno si pudiera agregar un ejemplo de cómo usar realmente este método para medir una cadena con una fuente en particular. – PeyloW

0

La solución anterior ahora está en desuso. Compruebe esto para iOS 7+

sizeWithFont:constrainedToSize:lineBreakMode 

está obsoleto ahora. Use el siguiente fragmento de código,

UIFont *font=[UIFont fontWithName:@"Arial" size:16.f]; 

NSString *name = @"APPLE"; 

CGSize size = [name sizeWithAttributes:@{NSFontAttributeName:font}]; 
Cuestiones relacionadas