J'ai une police personnalisée que je souhaite utiliser pour tout ce qui affiche du texte dans mon application, des étiquettes, des vues de texte, etc.
Existe-t-il un moyen de définir la police par défaut (les étiquettes par défaut utilisent SystemFont) pour l'ensemble de l'application?
IBDesignable
ces jours-ci. J'espère que ça aide. Considérez également ce QA intéressant: stackoverflow.com/a/38000466/294884Réponses:
Cela semble possible dans iOS 5 en utilisant le proxy UIAppearance.
Cela définira la police quelle que soit votre police personnalisée pour tous les UILabels de votre application. Vous devrez le répéter pour chaque contrôle (UIButton, UILabel, etc.).
N'oubliez pas que vous devrez mettre la valeur UIAppFonts dans votre info.plist et inclure le nom de la police que vous incluez.
la source
setFont:
méthode est obsolèteUILabel
. Il est déconseillé pour,UIButton
mais il utilise la police de latitleLabel
propriété à la place qui est aUILabel
, donc il suffit de définir la police avec le proxy d'apparence pourUILabel
.Swift 5
Sur la base de la réponse de Fábio Oliveira ( https://stackoverflow.com/a/23042694/2082851 ), je crée mon propre swift 4.
En bref, cette échange d'extension des fonctions par défaut
init(coder:)
,systemFont(ofSize:)
,boldSystemFont(ofSize:)
,italicSystemFont(ofSize:)
avec mes méthodes personnalisées.Notez que ce n'est pas entièrement implémenté, mais vous pouvez échanger plus de méthodes basées sur mon implémentation.
la source
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
fait l'affaire pour moi.UILabel
s qui définissent le style de texte (gras, titre, titre, etc.) ... ne fonctionne qu'avec des polices qui ont une taille et un jeu de polices système spécifiques. @ nahung89Il existe également une autre solution qui sera de surcharger systemFont.
Créez simplement une catégorie
UIFont + SystemFontOverride.h
UIFont + SystemFontOverride.m
Cela remplacera l'implémentation par défaut et la plupart des UIControls utilisent systemFont.
la source
Si vous utilisez Swift, vous pouvez créer une extension UILabel:
Et puis où vous faites votre proxy d'apparence:
Un code Objective-C équivalent est utilisé
UI_APPEARANCE_SELECTOR
sur une propriété avec le nomsubstituteFontName
.Une addition
Dans le cas où vous souhaitez définir séparément les polices gras et normaux:
Ensuite, pour vos proxys UIAppearance:
Remarque: si vous constatez que la substitution en gras ne fonctionne pas, il est possible que le nom de la police par défaut ne contienne pas "Medium". Changez cette chaîne pour une autre correspondance si nécessaire (merci à Mason dans les commentaires ci-dessous).
la source
UILabel
extension pour prendre un nom de police supplémentaire pour gras. Ensuite,set
faites une vérification pour voir si "Gras" est dans le nom de la police et ignorez le jeu dans un cas et utilisez-le dans l'autre. Je vais éditer et ajouter un exemple.rangeOfString("Medium")
et cela a fonctionné.En développant à partir de la réponse de Hugues BR mais en utilisant la méthode swizzling, je suis arrivé à une solution qui transforme avec succès toutes les polices en une police souhaitée dans mon application.
Une approche avec Dynamic Type devrait être ce que vous devriez rechercher sur iOS 7. La solution suivante n'utilise pas Dynamic Type.
Remarques:
- initWithCoder:
remplacement. Cependant, cela ne couvrira pas tous les cas;Cette solution utilise deux méthodes différentes pour obtenir le résultat final. Le premier est de remplacer les méthodes de classe UIFont
+ systemFontWithSize:
et similaires par celles qui utilisent mes alternatives (ici, j'utilise "Zapfino" pour ne laisser aucun doute sur le succès du remplacement).L'autre méthode consiste à remplacer la
- initWithCoder:
méthode sur UIFont pour remplacer toute occurrence deCTFontRegularUsage
et similaire par mes alternatives. Cette dernière méthode était nécessaire car j'ai constaté que lesUILabel
objets encodés dans des fichiers NIB ne vérifient pas les+ systemFontWithSize:
méthodes pour obtenir leur police système et les encodent en tantUICTFontDescriptor
qu'objets. J'ai essayé de remplacer- awakeAfterUsingCoder:
mais d'une manière ou d'une autre, il était appelé pour chaque objet codé dans mon storyboard et provoquait des plantages. Le remplacement- awakeFromNib
ne me permettrait pas de lire l'NSCoder
objet.la source
UIAlertController
) ne changent pas de police.Pour compléter la réponse de Sandy Chapman , voici une solution en Objective-C (mettez cette catégorie partout où vous voulez changer
UILabel
Appearance
):Le fichier d'interface doit avoir cette méthode déclarée publiquement pour être utilisée ultérieurement à partir d'endroits tels que votre délégué d'application:
Ensuite, vous pouvez changer le
Appearance
avec:la source
COMMENTAIRE POUR SWIFT 3.0 ET AVERTISSEMENT SWIFT
Vous pouvez supprimer le message d'avertissement en ligne:
En le remplaçant par:
la source
Pour Swift 5
Toutes les réponses ci-dessus sont correctes, mais je l'ai fait d'une manière peu différente en fonction de la taille de l'appareil . Ici, dans la classe ATFontManager, j'ai défini la taille de police par défaut qui est définie en haut de la classe comme defaultFontSize , c'est la taille de police de l' iphone plus et vous pouvez la modifier en fonction de vos besoins.
J'ai ajouté un certain nom de police, pour plus, vous pouvez ajouter le nom et le type de police ici.
Cette classe fait référence au détecteur de périphérique afin de fournir une taille de police appropriée en fonction du périphérique.
Comment utiliser. J'espère que cela aidera.
la source
Aucune de ces solutions ne fonctionne universellement dans toute l'application. Une chose que j'ai trouvée pour aider à gérer les polices dans Xcode est d'ouvrir le Storyboard en tant que code source (Control-click storyboard dans le navigateur de fichiers> "Ouvrir en tant que"> "Source"), puis de faire une recherche et un remplacement.
la source
Le type de police doit toujours être défini dans le code et la pointe / le storyboard.
Pour le code, tout comme Hugues BR l'a dit , le faire en catégorie peut résoudre le problème.
Pour la nib / storyboard, nous pouvons utiliser la méthode Swizzling awakeFromNib pour changer le type de police puisque l'élément d'interface utilisateur de nib / storyboard l'appelle toujours avant de s'afficher à l'écran.
Je suppose que vous connaissez Aspects . C'est une bibliothèque pour la programmation AOP, basée sur Method Swizzling. Nous créons une catégorie pour UILabel, UIButton, UITextView pour l'implémenter.
UILabel:
UIButton:
UITextField:
UITextView:
C'est tout, vous pouvez changer HelveticaNeue-light en macro avec votre nom de police.
la source
J'ai créé ma propre conversion de typographie pour Swift 4 après avoir examiné quelques articles, elle couvre la plupart des cas, tels que:
1er Ajouter des polices à la structure du projet et au fichier .plist (avec le même nom):
ensuite
Enfin, appelez la méthode créée à la
Appdelegate
suivante:la source
Probablement pas, vous aurez probablement défini la police sur votre contrôle vous-même, mais vous pouvez faciliter le processus en centralisant d'où vous obtenez les types de polices, par exemple, demandez au délégué d'application ou à une autre classe commune d'avoir une méthode qui renvoie le font, et tout ce qui a besoin de définir la police peut appeler cette méthode, cela vous aidera au cas où vous auriez besoin de changer votre police, vous la changeriez à un endroit plutôt que partout où vous définissez les polices ... Une autre alternative peut être de créer des sous-classes de vos éléments d'interface utilisateur qui définiront automatiquement la police, mais cela pourrait être excessif.
la source
NUI est une alternative au proxy UIAppearance. Il vous permet de contrôler la police (et de nombreux autres attributs) d'un grand nombre de types d'éléments d'interface utilisateur dans toute votre application en modifiant simplement une feuille de style, qui peut être réutilisée dans plusieurs applications.
Après avoir ajouté une
NUILabel
classe à vos étiquettes, vous pouvez facilement contrôler leur police dans la feuille de style:Si vous avez des étiquettes avec différentes tailles de police, vous pouvez contrôler leurs tailles à l'aide des classes Label, LargeLabel et SmallLabel de NUI, ou même créer rapidement vos propres classes.
la source
J'utilise comme ce type de classe de police dans Swift. Utilisation de la classe d'extension de police.
la source
Pour Xamarin.iOS à l'intérieur du
FinishedLaunching()
code put d'AppDelegate comme ceci: -définir la police pour l'ensemble de l'application et ajouter la
UIAppFonts
touche ' ' sur Info.plist, le chemin doit être le chemin où se trouve votre fichier de police .ttf .Pour moi, il se trouvait dans le dossier 'polices' de mon projet.la source
Comme @Randall l'a mentionné, le
UIApperance
proxy iOS 5.0+ peut être utilisé pour personnaliser l'apparence de toutes les instances d'une classe, en savoir plus .La saisie semi-automatique Xcodes n'affiche pas toutes les propriétés disponibles et peut générer une erreur, mais vous pouvez simplement le taper et il se compilera.
la source
Nous avons réalisé la même chose dans Swift -Xcode 7.2 en utilisant le contrôleur de vue parent et le contrôleur de vue enfant (héritage).
Fichier - Nouveau - Classe Cocoa Touch - ParentViewController.
Créez des contrôleurs de vue enfants et associez-les à un StoryBoard VC, ajoutez un textLabel.
OU Créez une classe UILabel personnalisée (méthode de sous-classification) et associez-y les étiquettes requises.
Remarque: La police et la couleur déclarées dans Parent VC sont implémentées dans CustomFontLabel. L'avantage est que nous pouvons modifier les propriétés de uilabel / any view en quelques modifications simples dans Parent VC.
2) 'pour' boucler UIView pour les sous-vues. Cela ne fonctionne que sur un VC particulier.
la source