Définir une police par défaut pour l'ensemble de l'application iOS?
J'ai une police personnalisée que je veux utiliser pour tout l'affichage du texte dans mon application, des étiquettes, du texte, etc vues.
Est-il un moyen de définir la police par défaut (étiquettes par défaut, utilisez SystemFont) pour l'ensemble de l'application?
- Ayant massivement regardé dans ce malheur. Nous avons honnêtement trouvé la chose la plus simple à faire est de simplement faire une (banal), nouvelle classe, pour chaque contrôle. Donc, pour UIButton, faire SJButton. N'oubliez pas de remplacer les deux initWithFrame et initWithCode. Pour chaque contrôle (dire UIButton, etc) définir les couleurs ou ce que vous voulez. Ramasser soigneusement dire la taille (c'est à dire qui sera la taille de l'ENSEMBLE SUR LA table de montage séquentiel) dans l'int code, et ensuite (comme vous préférez) l'utilisation de cette taille (et de définir, par exemple, la police, la couleur peu importe). C'est seulement quelques lignes de code, est incroyablement bien rangé, et vous permet d'économiser de vastes temps dans le long terme.
- Merci pour l'affichage de vos résultats - était sur le point de passer du temps à la recherche pour répondre à moi-même
- La droite. N'oubliez pas aussi de vous certainement DEVEZ utiliser
IBDesignable
ces jours-ci. Espérons que cela aide. Également envisager de cet intéressant QA: stackoverflow.com/a/38000466/294884
Vous devez vous connecter pour publier un commentaire.
Il semble être possible dans iOS 5 utilisation de l'UIAppearance proxy.
Qui permettra de définir la police de caractères à ce que votre police personnalisée est pour tous les UILabels dans votre application. Vous aurez besoin de la répéter pour chaque contrôle (UIButton, UILabel, etc.).
Rappelez-vous, vous aurez besoin de mettre la UIAppFonts valeur de votre info.plist et inclure le nom de la police que vous êtes, y compris.
setFont:
méthode est obsolèteUILabel
. C'est déconseillé pourUIButton
mais à l'aide de la police pour letitleLabel
propriété à la place qui est uneUILabel
, il suffit donc de configurer la police avec l'apparition de proxy pourUILabel
doit être fine.[[UILabel appearance] setFont:[UIFont fontWithName:@"YourFontName" size:[UILabel appearance].font.pointSize]];
Swift 4.1
Base sur Fábio Oliveira réponse (https://stackoverflow.com/a/23042694/2082851), je fais mes propres swift 4.
En bref, cette extension des échanges par défaut des fonctions de
init(coder:)
,systemFont(ofSize:)
,boldSystemFont(ofSize:)
,italicSystemFont(ofSize:)
avec mes méthodes personnalisées.Noter qu'il n'est pas pleinement mise en œuvre, mais vous pouvez échanger des méthodes de base sur mon œuvre.
default
si elle renvoie la valeur commeCTFontXXXUsage
. Si elle a ensuite, vous pouvez ajouter un nouveau cas et de réaliser ses propres personnaliser.print
pourfontAttribute
, c'estCTFontMediumUsage
. Merci 🙂let initCoderMethod = class_getInstanceMethod(self, Selector("initWithCoder:"))
if let fontAttribute = fontDescriptor.fontAttributes[.nsctFontUIUsage] as? String {
a fait le tour pour moi.if let fontDescriptor = aDecoder.decodeObject(forKey: "UIFontDescriptor") as? UIFontDescriptor {
(c'est à dire, toujours, il saute à laelse
clause). Il fait également m'ajouter@objc
à tous lesmyXXSystemFont
méthodes et lesconvenience init
.UILabel
s que l'ensemble du texte-style (gras,titre,titre, etc)... ne fonctionne qu'avec la police qui ont une taille spécifique et le système de jeu de polices. @nahung89CTFontDemiUsage
attribut de police pour vérification semi-gras. Également fournir des semi-gras-le nom de la police dansAppFontName
énumération. C'est assez simple mec 😀Il y a aussi une autre solution qui sera à remplacer systemFont.
Il suffit de créer une catégorie
UIFont+SystemFontOverride.h
UIFont+SystemFontOverride.m
Ce sera de remplacer la valeur par défaut de la mise en œuvre et la plupart des UIControls utilisation systemFont.
Si vous êtes en utilisant Swift, vous pouvez créer un UILabel extension:
Et puis où vous faites votre apparence proxy:
Il est l'équivalent du code Objective-C à l'aide de
UI_APPEARANCE_SELECTOR
sur une propriété avec le nomsubstituteFontName
.Plus
Pour le cas où vous souhaiteriez mettre du gras et régulière polices séparément:
Alors pour votre UIAppearance procurations:
Remarque: si vous trouvez que le gras de substitution n'est pas de travail, il est possible que la police par défaut nom ne contient pas de "Moyen". Interrupteur de la chaîne pour un autre match en tant que de besoin (grâce à Mason dans les commentaires ci-dessous) .
UILabel
extension de prendre un supplément de nom de la police pour le gras. Puis, dans laset
faire une vérification pour voir si "Bold" est dans le nom de la police et d'ignorer l'ensemble dans un cas, et de l'utiliser dans l'autre. Je vais modifier et ajouter un exemple.rangeOfString("Medium")
et cela a fonctionné.font.description
et de vérifier si le mot de moyenne et de gras sont là... si gras est là, alors c'est gras... si seulement le médium est là, alors c'est moyen mais L'inconvénient de cette solution est qu'elle ne fonctionne que sur UILabels... pas sur UITextView, ect...Développement de Hugues BR réponse, mais l'aide de la méthode swizzling j'en suis arrivé à une solution qui est réussi à changer toutes les polices de caractères d'une police souhaitée dans mon application.
Une approche de Type Dynamique devrait être ce que vous devriez regarder pour sur iOS 7. La solution suivante est de ne pas utiliser de Type Dynamique.
Notes:
- initWithCoder:
remplacer. Toutefois à ne pas couvrir tous les cas;Cette solution utilise deux méthodes différentes pour obtenir le résultat final. La première est de remplacer le UIFont les méthodes de la classe
+ systemFontWithSize:
et même avec ceux qui utilisent mes alternatives (j'utilise ici "Zapfino" pour ne laisser aucun doute que le remplacement a été couronnée de succès).L'autre méthode consiste à substituer
- initWithCoder:
méthode sur UIFont pour remplacer toutes les occurrences deCTFontRegularUsage
et similaires par ma alternatives.Cette dernière méthode a été nécessaire, car j'ai trouvé que
UILabel
objets encodés en PLUME fichiers ne cochez pas la+ systemFontWithSize:
méthodes pour obtenir leur système de police et, au lieu de coder commeUICTFontDescriptor
objets.J'ai essayé de remplacer
- awakeAfterUsingCoder:
mais de toute façon il a été appelé pour chaque codé objet dans mon storyboard et provoquant des plantages. Primordial- awakeFromNib
ne me permet pas de lire lesNSCoder
objet.UIAlertController
) ne pas changer de police.Pour compléter De sable Chapman réponse, voici une solution en Objective-C (mettre ce catégorie n'importe où vous voulez changer
UILabel
Appearance
):Le fichier d'interface, doivent avoir cette méthode a déclaré publiquement être utilisés ultérieurement à des endroits comme votre délégué d'application:
Ensuite, vous pouvez modifier la
Appearance
avec:COMMENTAIRE POUR SWIFT 3.0 ET SWIFT AVERTISSEMENT
Vous pouvez supprimer le message d'avertissement en ligne:
En le remplaçant par:
Pour Swift 5
Toutes les réponses ci-dessus sont corrects, mais je l'ai fait en peu de manière différente, c'est-à selon la taille de l'instrument.
Ici, dans ATFontManager classe, j'ai fait à la taille de police par défaut qui est de définir au sommet de la classe comme defaultFontSize, c'est la taille de la police de
plus iphone et vous pouvez changer selon votre condition.
J'ai ajouté certains nom de la police, de plus, vous pouvez ajouter le nom de la police et le type ici.
Cette classe désigne le détecteur de périphérique afin de fournir des mesures de taille de police en fonction de l'appareil.
Comment l'utiliser. J'espère que ça aidera.
Aucune de ces solutions ne fonctionne universellement dans toute l'application. Une chose que j'ai trouvé pour l'aider à gérer les polices de caractères dans Xcode est l'ouverture de la table de montage séquentiel comme le code Source (ctrl-cliquez sur le storyboard dans les Fichiers navigator > "Ouvrir en tant que" > "Source"), et ensuite de faire un rechercher-remplacer.
Type de police toujours être définis dans le code et la plume/storyboard.
Pour le code,tout comme Hugues BR a dit,de le faire dans catégorie peut résoudre le problème.
De la nib/storyboard,nous pouvons Méthode Swizzling awakeFromNib pour changer le type de police depuis l'élément de l'INTERFACE utilisateur de pointe/storyboard toujours appeler avant de l'afficher à l'écran.
Je suppose que vous savez Aspects.C'est une bibliothèque pour les AOP de programmation,en fonction de la Méthode Swizzling.
Nous créons catégorie pour UILabel,UIButton,UITextView à mettre en œuvre.
UILabel:
UIButton:
UITextField:
UITextView:
C'est tout,vous pouvez modifier HelveticaNeue-light à une macro avec votre nom de police.
J'ai créé ma propre conversion de la typographie pour Swift 4 après l'examen de quelques postes, il couvre la plupart des cas, tels que:
Enfin appel à créé méthode à
Appdelegate
comme suivant:Probablement pas, vous aurez probablement l'ensemble de la police sur votre contrôle de vous-même, mais vous pouvez rendre le processus plus facile par la centralisation de l'endroit où vous obtenez les types de caractères, par exemple l'application d'un délégué ou d'autres classe ont une méthode qui retourne la police, et n'importe quoi avoir à définir la police peut appeler cette méthode, qui aidera au cas où vous avez besoin de changer votre police, youd modifier dans un seul endroit plutôt que partout où vous définissez les polices...une Autre solution peut être de créer des sous-classes de vos Éléments d'INTERFACE utilisateur qui sera automatiquement réglée à la police, mais qui peut-être exagéré..
NUI est une alternative à la UIAppearance proxy. Il vous donne le contrôle sur la police (et de nombreux autres attributs) d'un grand nombre d'élément de l'INTERFACE utilisateur types tout au long de votre application en modifiant simplement une feuille de style, qui peut être réutilisée dans de multiples applications.
Après l'ajout d'un
NUILabel
de la classe à vos étiquettes, vous pouvez facilement le contrôle de la police dans la feuille de style:Si vous avez des étiquettes avec des tailles de police différentes, vous pouvez contrôler leurs tailles NUI à l'aide de l'Étiquette, LargeLabel, et SmallLabel classes, ou même de créer rapidement vos propres classes.
Suis en utilisant comme ce type de classe de la police en swift. En utilisant la police de l'extension de la classe.
Pour Xamarin.iOS à l'intérieur de AppDelegate de
FinishedLaunching()
mettre le code comme ceci :-définir la police pour l'ensemble de l'application et Ajouter "
UIAppFonts
la touche Info.plist , le chemin doit être le chemin où le fichier de police .ttf est situé .Pour moi, il était à l'intérieur de polices dans le dossier mon projet.Comme @Randall mentionné iOS 5.0+
UIApperance
proxy peut être utilisé pour personnaliser l'apparence de toutes les instances d'une classe lire plus.Xcodes automatique ne montre pas toutes les propriétés disponibles et pourrait jeter une erreur, mais vous pouvez tout type et de le compiler.
Nous avons atteint le même dans Swift -Xcode 7.2 utilisation de la Vue Parent de Contrôleur et de l'Enfant-vue-contrôleur (Héritage).
Fichier - Nouveau - Cocoa Touch classe - ParentViewController.
Aider un enfant à la vue des contrôleurs et de s'associer avec un StoryBoard, VC, ajouter un textLabel.
OU personnaliser un UILabel Classe(Sous-classification de la méthode) et d'associer des étiquettes requises pour elle.
Remarque: la Police et La couleur déclarée Parent VC sont mis en œuvre dans CustomFontLabel . L'avantage est que nous pouvons modifier les propriétés de uilabel/tout afficher tous ensemble dans certains de simples changements dans Parent VC.
2) "pour" boucle UIView pour les sous-vues. Il fonctionne uniquement sur un particulier de VC.