Une police sur mesure dans un storyboard?

j'ai une police ajoutée à mon projet iOS. C'est dans le projet et copié quand le projet se construit. Il semble être une police valide et apparaîtra si je liste Toutes les polices sur le périphérique via l'application. J'ai le plist correctement configuré pour inclure la police. Je n'arrive pas à trouver la find pour l'utiliser dans Mes commandes texte, boutons, etc dans la section storyboard de Xcode 4.2. De plus, il ne semble pas me permettre de taper le nom de la police, il m'oblige à utiliser la boîte de dialogue police. J'ai essayé pour installer cette police dans le système, mais ne semble pas à l'obtenir à afficher dans cette liste. Dois-je le faire en code SEULEMENT OU puis-je le faire à travers l'interface storyboard?

noter que je peux obtenir ce travail en code, mais il serait beaucoup plus pratique de le faire via le storyboard.

62
demandé sur Rob Keniger 2012-02-01 08:20:55

7 réponses

mise à jour: Xcode 6 Interface Builder vous permet maintenant de sélectionner des polices personnalisées et de les rendre correctement au moment de la conception.

je sais que cette question est assez ancienne, mais j'ai eu du mal à trouver un moyen facile de spécifier une police personnalisée dans Storyboard (ou Interface Builder) facilement pour iOS 5 et j'ai trouvé une solution assez commode.

tout d'abord, assurez-vous que vous avez ajouté la police au projet en suivant ce tutoriel . Rappelez-vous également que la police personnalisée UINavigationBar, UITabBar et UISegmentedControl peut être spécifiée en utilisant la méthode setTitleTextAttributes: de la uiappearance proxy .

ajouter les catégories ci-dessous au projet pour UIButton, UITextField, UILabel et tout autre composant qui nécessite une police personnalisée. Les catégories implémentent simplement une nouvelle propriété fontName qui modifie la police actuelle de l'élément tout en maintenant la taille de la police.

pour spécifier la police dans le Storyboard, il suffit de sélectionner l'élément désiré (étiquette, bouton, textview, etc) et d'ajouter un attribut D'exécution défini par L'utilisateur avec chemin de la clé défini à nom de police de type chaîne de caractères et valeur avec le nom de votre police personnalisée.

Custom font Storyboard

et c'est tout, vous n'avez même pas besoin de importer les catégories. De cette façon, vous n'avez pas besoin d'un exutoire pour chaque composant de L'interface utilisateur qui nécessite une police personnalisée et vous n'avez pas besoin de le coder manuellement.

tenir compte du fait que la police n'apparaîtra pas dans le Storyboard, mais vous la verrez lors de l'exécution sur votre appareil ou simulateur.


"1519100920 Catégorie" fichiers

UIButton+TCCustomFont.h :

#import <UIKit/UIKit.h>

@interface UIButton (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UIButton+TCCustomFont.m :

#import "UIButton+TCCustomFont.h"

@implementation UIButton (TCCustomFont)

- (NSString *)fontName {
    return self.titleLabel.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}

@end

UILabel+TCCustomFont.h :

#import <UIKit/UIKit.h>

@interface UILabel (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UILabel+TCCustomFont.m :

#import "UILabel+TCCustomFont.h"

@implementation UILabel (TCCustomFont)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end

UITextField+TCCustomFont.h :

#import <UIKit/UIKit.h>

@interface UITextField (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UITextField+TCCustomFont.m :

#import "UITextField+TCCustomFont.h"

@implementation UITextField (TCCustomFont)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end

aussi téléchargeable à partir de GIST et aussi comme un seul fichier .

dépannage

si vous exécutez contre des erreurs d'exécution parce que la propriété fontName n'est pas spécifiée, ajoutez simplement le drapeau -all_load sous autres drapeaux de linker dans les paramètres du projet pour forcer le linker à inclure les catégories.

144
répondu redent84 2017-04-20 13:00:33

De Xcode6.0, comme Xcode6.0 libération note:

Interface Builder rend personnalisé incorporé iOS polices lors de la conception du temps, de donner un aperçu plus précis de la façon dont le fini app look, avec les dimensions correctes.

vous pouvez définir une police étiquette dans le storyboard.Vous pouvez le faire ainsi

  1. Obtenez-vous personnalisés fichier de police( .ttf, .ttc)
  2. Importer les fichiers de polices dans votre projet Xcode

    enter image description here

  3. Dans le app-info.plist , ajouter une clé nommée polices fournies par l'application .C'est un type de tableau , ajoutez tout votre nom de fichier police au tableau, note:y compris l'extension de fichier.

enter image description here

  1. dans le storyboard , faites glisser un UILabel à votre interface,sélectionnez l'étiquette , et naviguez vers le Inspecteur D'attribut , cliquez sur le bouton droit icône de la zone de sélection de police .Dans le panneau contextuel , choisissez Font à Custom , et choisissez la Family de votre nom de police Embedded.

enter image description here

ref

58
répondu monjer 2014-12-01 12:15:06

c'est un bug dans XCode, il est là depuis 3.x et toujours pas réparé. Moi aussi, j'ai connu le même problème, même essayé de l'ajouter à mon système avec pas de chance. Voici un autre article de SO à ce sujet polices n'affichant pas dans L'Interface Builder

5
répondu Dan 2017-05-23 10:31:07

la réponse de Monjer est la bonne. Si vous, comme moi, ne voyez pas la police ajoutée après la compilation, assurez-vous d'ajouter les polices aux phases de construction (cibles - > phases de construction - > ressources de paquet de copie - > ajouter vos fichiers de police)

3
répondu HugglesNL 2015-06-24 13:51:58

la solution de redent84 était géniale!

je voudrais juste ajouter une amélioration, ajouter la catégorie sur NSObject, donc vous n'avez qu'à le faire une fois.

NSObject+CustomFont.h

#import <Foundation/Foundation.h>

@interface NSObject (CustomFont)

@property (strong, nonatomic) NSString *fontName;
@property (strong, nonatomic) UIFont *font;

@end

NSObject+CustomFont.m

#import "NSObject+CustomFont.h"

@implementation NSObject (CustomFont)

@dynamic font;

- (NSString *)fontName
{
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName
{
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end
0
répondu Rodrigo Ruiz 2014-08-06 17:06:54

aucun de ceux-ci n'a fonctionné pour moi, mais cela a fonctionné.

#import <UIKit/UIKit.h>

@interface UILabelEx : UILabel


@end

#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];   
}
@end
0
répondu Jules 2015-11-13 09:12:29

à partir de XCode 9.4, XCode ne respecte toujours pas les polices directement dans le storyboard. Vous pouvez les voir au moment de la conception, mais pas à l'exécution. Si vous utilisez l'API fontWithName, vous savez qu'elle renvoie zéro, mais lorsqu'elle est utilisée dans storyboard/xib, il n'y a aucun moyen de savoir pourquoi elle n'apparaît pas.

  • la seule façon de s'assurer qu'il fonctionne facilement à partir de Storyboard/XIB à l'exécution est d'ajouter .ttc/.ttf dans Copy Bundle Resources Phase de construction.

  • à partir du 9.4, en ajoutant des noms de fichiers de police à info.plist ne semble plus une exigence.

0
répondu Nirav Bhatt 2018-07-09 13:47:45