ios7 uilabel textkit

ios7 - Ajuste el espaciado entre letras en iOS 7



uilabel textkit (3)

En iOS 7, cuando se navega hacia atrás con el nuevo gesto de deslizar desde el borde de la pantalla, el título del botón Atrás ("Artistas") se desvanece de color rosa (en el ejemplo a continuación) y tiene un peso de fuente regular a negro y tener un peso de fuente en negrita.

Me parece que la animación utiliza dos etiquetas diferentes para lograr este efecto; una se desvanece a medida que se desvanece la otra. Sin embargo, Apple ha ajustado de alguna manera la fuente para que la etiqueta normal se superponga perfectamente a la negrita, creando así la ilusión de una etiqueta única que se transforma entre dos pesos y colores diferentes.

¿Han simplemente ajustado el espacio entre las letras en la fuente regular para que coincida con la negrita? En ese caso, ¿cómo se lograría eso en iOS 7? ¿Tiene Text Kit alguna característica increíble para hacer esto o cómo debo hacerlo?


Con Swift 4 e iOS 11, NSAttributedStringKey tiene una propiedad estática llamada kern . kern tiene la siguiente declaration :

static let kern: NSAttributedStringKey

El valor de este atributo es un objeto NSNumber que contiene un valor de punto flotante. Este valor especifica la cantidad de puntos por los cuales se ajustan los caracteres de par de kern. El kerning evita que se produzcan espacios no deseados entre caracteres específicos y depende de la fuente. El valor 0 significa que el kerning está deshabilitado. El valor predeterminado para este atributo es 0 .

El siguiente código de Playground muestra una posible implementación de kern para tener un espacio entre letras en su NSAttributedString :

import PlaygroundSupport import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let string = "Some text" let paragraph = NSMutableParagraphStyle() paragraph.alignment = .center let attributes: [NSAttributedStringKey: Any] = [ NSAttributedStringKey.kern: 2, NSAttributedStringKey.paragraphStyle: paragraph ] let attributedString = NSMutableAttributedString(string: string, attributes: attributes) let label = UILabel() label.attributedText = attributedString view.backgroundColor = .white view.addSubview(label) label.translatesAutoresizingMaskIntoConstraints = false label.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true label.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor).isActive = true label.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor).isActive = true } } PlaygroundPage.current.liveView = ViewController()


Para Swift 4+, la sintaxis es tan simple como:

let text = NSAttributedString(string: "text", attributes: [.kern: 1.4])


Puede ajustar el espaciado de letras de esta manera, utilizando NSAttributedString .

En Objective-C:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"The Clash"]; [attributedString addAttribute:NSKernAttributeName value:@(1.4) range:NSMakeRange(0, 9)]; self.label.attributedText = attributedString;

En Swift:

let attributedString = NSMutableAttributedString(string: "The Clash") attributedString.addAttribute(NSKernAttributeName, value: CGFloat(1.4), range: NSRange(location: 0, length: 9)) label.attributedText = attributedString

Más información sobre el kerning está disponible en Conceptos tipográficos de la Guía de programación de texto .

No creo que haya una función de TextKit que coincida automáticamente con el espacio de la fuente entre el texto en negrita y el texto normal.