Dans iOS 7, lorsque vous revenez en arrière en utilisant le nouveau geste de balayage depuis le bord de l'écran, le titre du bouton Retour ("Artistes") passe du rose (dans l'exemple ci-dessous) et du poids normal de la police au noir et ayant un poids de police gras.
Il me semble que l'animation utilise deux labels différents pour obtenir cet effet; l'un s'estompe tandis que l'autre disparaît. Cependant, Apple a en quelque sorte ajusté la police de sorte que l'étiquette régulière superpose parfaitement celle en gras, créant ainsi l'illusion d'une seule étiquette morphing entre deux poids différents et les couleurs.
Ont-ils simplement ajusté l'espacement des lettres sur la police régulière pour qu'elle corresponde à celle en gras? Dans ce cas, comment cela serait-il possible dans iOS 7? Est-ce que Text Kit a des fonctionnalités impressionnantes pour le faire ou comment dois-je m'y prendre?
Vous pouvez ajuster l'espacement des lettres comme ceci, en utilisant NSAttributedString
.
Dans l'objectif-C:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"The Clash"];
[attributedString addAttribute:NSKernAttributeName
value:@(1.4)
range:NSMakeRange(0, 9)];
self.label.attributedText = attributedString;
Dans Swift:
let attributedString = NSMutableAttributedString(string: "The Clash")
attributedString.addAttribute(NSKernAttributeName, value: CGFloat(1.4), range: NSRange(location: 0, length: 9))
label.attributedText = attributedString
Plus d'informations sur le crénage sont disponibles dans Concepts typographiques du Guide de programmation de texte .
Je ne pense pas qu'il existe une fonctionnalité TextKit qui correspondra automatiquement à l'espacement des polices entre le texte en gras et le texte normal.
Pour Swift 4+ la syntaxe est aussi simple que:
let text = NSAttributedString(string: "text", attributes: [.kern: 1.4])
Avec Swift 4 et iOS 11, NSAttributedStringKey
a une propriété statique appelée kern
. kern
a ce qui suit declaration =:
static let kern: NSAttributedStringKey
La valeur de cet attribut est un objet
NSNumber
contenant une valeur à virgule flottante. Cette valeur spécifie le nombre de points permettant d'ajuster les caractères de paire de crénage. Le crénage empêche la présence d'espace indésirable entre des caractères spécifiques et dépend de la police. La valeur0
signifie que le crénage est désactivé. La valeur par défaut de cet attribut est0
.
Le code Playground suivant montre une implémentation possible de kern
afin d'avoir un certain espacement des lettres dans votre 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()