Espaciado de letra en iOS

Tengo el siguiente código:

[[cancelButton titleLabel] setFont:[UIFont fontWithName:@"ProximaNova-Regular" size:15]]; 

¿Cómo establecería el espaciado entre letras también?

No puede cambiar el espacio entre letras en el resumen, lo que significa que no puede cambiarlo en iOS 5 y siguientes.

A partir de iOS 6, puede enviar una cadena atribuida en lugar de una vainilla a una UILabel . El process para empujar una cadena atribuida funciona de manera ligeramente diferente del process para empujar una cadena común: la fuente, el color del text y un montón de otras properties se establecen en la cadena en lugar de en la label. La razón es que las cadenas atribuidas permiten establecer diferentes attributes para diferentes regiones de la cadena. Para que pueda establecer una cadena que combina múltiples fonts, colors de text, etc.

Uno de los attributes de text de base compatibles es kCTKernAttributeName , que a partir de iOS 6 es más fácil de aprovechar a través de la adición de NSKernAttributeName . Puede usar kerning para ajustar el espaciado horizontal de los glifos.

En iOS 5 y versiones anteriores solías tener que hacer muchos saltos mentales entre los objects de estilo Core Foundation C y los objects Objectivity-C UIKit. A partir de 6 ya no es necesario. Pero ten cuidado si buscas en la networking que las cosas son mucho más fáciles de less de 6, si ves muchos __bridge castings y CFRelease s manuales, probablemente busques código antiguo.

De todos modos, suponiendo que tengas algo así como:

 UILabel *label = [cancelButton titleLabel]; UIFont *font = <whatever>; UIColor *textColour = <whatever>; NSString *string = <whatever>; label.text = string; label.font = font; label.textColor = textColour; 

En su lugar, haría algo más como:

 NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:string attributes: @{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColour }]; label.attributedText = attributedString; 

En su caso, también para ajustar el kerning general que agregaría:

 NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:string attributes: @{ NSFontAttributeName : font, NSForegroundColorAttributeName : textColour, NSKernAttributeName : @(-1.3f) }]; label.attributedText = attributedString; 

O cualquier valor de interconnection que desee aplicar. Vea las diversas constantes en la parte inferior de la Referencia de adiciones de UIKit de NSAttributedString para los diversos otros attributes que puede aplicar y en qué versión de iOS estuvieron disponibles por primera vez.

Mucho más tarde: si bien es una de las personas less Swifty que conocerá, creo que es el equivalente en Swift:

 button.titleLabel?.attributedText = NSAttributedString( string: string, attributes: [ NSFontAttributeName: font, NSForegroundColorAttributeName: textColour, NSKernAttributeName: -1.3 ]) 

Uno de los attributes de text de base compatibles es kCTKernAttributeName, que a partir de iOS 6 es más fácil de aprovechar a través de la adición de UIKit NSKernAttributeName. Puede usar kerning para ajustar el espaciado horizontal de los glifos.

Kerning es el ajuste del espacio entre dos letras únicas. El kerning varía entre diferentes pares de caracteres. Por ejemplo, una combinación como 'AVA' tendría un kerning diferente entre los caracteres que algo así como 'VVV'

Al usar NSKernAttributeName, estás reemplazando ese ajuste de espacio personalizado que está integrado en el file de fuente, estableciendo todos los varios valores de kern de pares de caracteres en el mismo número, rompiendo así el kerning óptimo. Cuando se aplica a una cadena entera de text, pequeñas cantidades de intercalar el espaciado roto son más notables. Sin embargo, los altos valores de kerning podrían empujar la carta lo suficientemente lejos como para que el espacio pobre no sea tan notable.

Lo que está buscando es Seguimiento (también conocido como espaciado de letras), que es el espacio entre todas las letras en un bloque de text dado. Desafortunadamente, iOS no parece permitirte controlar ese atributo.