Dans iOS7, il existe de nouvelles API pour obtenir une police qui est automatiquement ajustée à la taille du texte que l'utilisateur a définie dans ses préférences.
Cela ressemble à quelque chose comme ça pour l'utiliser:
UIFont *myFont = [UIFont fontWithDescriptor:[UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleHeadline] size:0];
Maintenant, quel que soit le texte auquel vous attribuez cela, la taille de la police augmentera et diminuera à mesure que l'utilisateur modifie le paramètre de taille de texte du système. (N'oubliez pas d'écouter la name:UIContentSizeCategoryDidChangeNotification
notification et de mettre à jour votre vue pour tenir compte du changement de taille).
Réponses:
Dans les coulisses de cette API, Apple a une sorte de table de recherche qui renvoie une famille de polices, une taille et parfois des traits symboliques spécifiques (comme le gras) qui (par exemple
UIFontTextStyleHeadline
) et la taille de texte préférée de l'utilisateur. Ce dernier est une chaîne tirée de lasharedApplication
sorte:(J'ai déconnecté toutes les tailles / polices / traits par défaut pour Helvetica-Neue pour les différentes tailles de texte dynamiques). Depuis, nous avons ajouté la gestion des tailles d'accessibilité, ce qui est important .
Il vous suffit donc de créer une table de recherche similaire. Notre designer a créé une feuille de calcul simple pour moi:
Notez que nous avons ajouté quelques styles (légendes 3 et 4) pour en avoir 8 au lieu de 6.
Ensuite, vous voudrez le placer dans un endroit pratique, comme une catégorie
UIFontDescriptor
. Vous voudrez que votre méthode renvoie uneUIFontDescriptor
API similaire à celle d'Apple, de sorte qu'il soit toujours facile de l'ajuster avec des traits symboliques, etc.Ma catégorie ressemble à ceci:
UIFontDescriptor + AvenirNext.h
UIFontDescriptor + AvenirNext.m
Nous avons choisi d'utiliser la même police de base
AvenirNext-Medium
, puis gras et autres via des traits symboliques, mais vous pourriez devenir fou et spécifier différentes variantes de poids sur votre police dans le cadre de votre table de recherche si vous le souhaitez, par exempleAvenirNext-ExtraBold
.C'est tout ce qu'on peut en dire! Nous l'utilisons comme ceci:
la source
UIContentSizeCategoryAccessibilityMedium
,UIContentSizeCategoryAccessibilityLarge
, etc.UIFont
, pour pouvoir simplement utiliser[UIFont preferredAvenirFontForTextStyle:UIFontTextStyleHeadline]
:? La taille est redondante dans l'exemple que vous donnez en bas?C'est comme ça que je le fais dans Swift. J'aime cela parce que c'est plus général, cela ne nécessite qu'une seule table et cela devrait bien fonctionner avec n'importe quelle police. J'ai d'abord écrit un multiplicateur généralisé (dans un getter).
Ensuite, je mets à jour la police (par exemple, dans l'observateur) en utilisant un
UIFontDescriptor
comme ceci:la source
Dans iOS 11, la
UIFontMetrics
classe a été introduite. Créez un objet FontMetrics pour le style de texte qui vous intéresse. Choisissez ensuite la police de votre choix, dimensionnée pour la taille de texte dynamique standard. Ensuite, vous pouvez demander à l'objet FontMetrics de redimensionner cette police en fonction des paramètres actuels de l'utilisateur.la source
Code @Bob Spryn réécrit avec Swift:
Usage:
la source
let style = Static.fontSizeTable[textStyle] as! NSDictionary
etreturn UIFontDescriptor(name: SubStruct.preferredFontName as String, size: CGFloat((style[contentSize] as! NSNumber).floatValue))
Essaye ça:
Mais gardez à l'esprit que ce code n'est qu'une approximation (le type dynamique fait bien plus que simplement mettre à l'échelle la taille de la police).
la source
Semblable à l'approche de @ bill-weinman , j'ai pris la balance et je l'ai divisée en une fonction qui ne repose pas sur une taille de police donnée de 16.
Il peut ensuite être utilisé avec des polices personnalisées comme celle-ci:
la source
Dans iOS 11, vous pouvez utiliser:
Voir aussi Création d'applications avec Dynamic Type WWDC 2017 - Session 245 - heure iOS 8:34.
la source
Code Swift 2.1-3.0 basé sur le port de @ smartDonkey du code @Bob Spryn. Également mis à jour avec les tailles Apple de @Klaas .
la source
'dispatch_once_t' is unavailable in Swift: Use lazily initialized globals instead
Voici comment je mets à jour la police d'un prefferedFontForTextStyle:
la source
Je voulais juste intervenir et dire qu'il existe une bibliothèque pour aider à intégrer des polices personnalisées et gérer les changements de taille de type dynamique. Il s'appelle, utilement, Font ( https://github.com/adamyanalunas/Font ) et au lieu d'être une solution magique, il met en place une structure pour gérer chaque police personnalisée différemment tout en supprimant le passe-partout.
nb je suis l'auteur de cette petite bibliothèque et je trouve que c'est chouette.
la source
Voici mon point de vue sur la réponse de @ Gobe, dans Swift 3:
la source
À partir d'iOS 11, vous pouvez ajuster par programme les polices personnalisées configurées dans l'éditeur visuel:
la source