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 valor0
significa que el kerning está deshabilitado. El valor predeterminado para este atributo es0
.
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.