Je veux exposer toutes les instances de caractère ® dans un bloc de texte (mentions légales, naturellement;)) et la méthode par défaut NSAttributedString
n'est pas très bonne.
Si je laisse simplement le caractère être et n'utilise que NSString
non modifié, il est rendu de la même taille qu'une lettre majuscule et est placé approximativement à la ligne de base. Si j'ajoute l'attribut exposant à NSAttributedString
comme suit:
[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];
Le caractère est retiré de la ligne de base, sa taille est inchangée, mais l'espacement des lignes est désormais affecté car le caractère surélevé empiéterait autrement sur la ligne ci-dessus.
Pour illustrer:
J'ai créé cette image dans Photoshop où la position souhaitée a été obtenue en réduisant la taille du personnage et en déplaçant la ligne de base. Je sais comment changer la taille de la police dans iOS, mais changer la ligne de base semble plus délicat. Des suggestions sur la façon d'y parvenir?
Edit: je suppose que je pourrais utiliser l'attribut exposant comme un moyen de déplacer la ligne de base vers le haut. Maintenant, il serait formidable de trouver un moyen d'obtenir la taille de police actuelle et de la réduire par la suite pour permettre à la même méthode d'être utilisée sur des blocs de texte de taille différente.
Le code suivant semble faire l'affaire:
UIFont *fnt = [UIFont fontWithName:@"Helvetica" size:20.0];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"GGG®GGG"
attributes:@{NSFontAttributeName: [fnt fontWithSize:20]}];
[attributedString setAttributes:@{NSFontAttributeName : [fnt fontWithSize:10]
, NSBaselineOffsetAttributeName : @10} range:NSMakeRange(3, 1)];
Version Swift:
let fnt = UIFont(name:"Helvetica", size:20.0)
let attributedString = NSMutableAttributedString(string:"GGG®GGG", attributes:[NSFontAttributeName : fnt!])
attributedString.setAttributes([NSFontAttributeName : fnt!.fontWithSize(10), NSBaselineOffsetAttributeName: 10], range: NSRange(location: 3, length: 1))
Dans mon exemple, je veux souscrire une instance du symbole infini pour que le titre de mon étiquette ressemble à ceci:
let font = UIFont(name: "Helvetica", size: 14.0)
let attributedString = NSMutableAttributedString(string: "Solids(ΔE∞)•G7®", attributes: [NSAttributedStringKey.font : font!])
attributedString.setAttributes([NSAttributedStringKey.baselineOffset: -5], range: NSRange(location: 9, length: 1))
solidsLbl.attributedText = attributedString
Swift 5
let fnt = UIFont(name:"Helvetica", size:20.0)
let attributedString = NSMutableAttributedString(string:"2.099", attributes:[NSAttributedString.Key.font : fnt!])
attributedString.setAttributes([NSAttributedString.Key.font : fnt!.withSize(10), NSAttributedString.Key.baselineOffset: 10], range: NSRange(location: 4, length: 1))