iOS
Benutzerdefinierte Schriftarten
Suche…
Einbetten benutzerdefinierter Schriftarten
Unterstützung für benutzerdefinierte Schriftarten
Anwendungen, die benutzerdefinierte Schriftarten verwenden möchten, können diese Schriftarten jetzt in ihr Anwendungspaket aufnehmen und sie beim System registrieren, indem sie den UIAppFonts-Schlüssel in ihre Info.plist-Datei aufnehmen. Der Wert dieses Schlüssels ist ein Array von Zeichenfolgen, das die Zeichensatzdateien im Bundle der Anwendung identifiziert. Wenn das System den Schlüssel sieht, lädt es die angegebenen Schriftarten und stellt sie der Anwendung zur Verfügung.
Nachdem die Schriftarten in der Info.plist
, können Sie Ihre benutzerdefinierten Schriftarten wie jede andere Schriftart in IB oder programmgesteuert verwenden.
- Ziehen Sie die Schriftart in den Ordner "Xcode-Unterstützungsdateien". Vergessen Sie nicht, Ihre App im Abschnitt "Zu Zielen hinzufügen" zu markieren. Ab diesem Zeitpunkt können Sie diese Schrift in IB verwenden und aus der Schriftpalette auswählen.
- Um diese Schriftart auf dem Gerät verfügbar zu machen, öffnen Sie
Info.plist
und fügen SieFonts provided by application key
(UIAppFonts)Fonts provided by application key
hinzu. Fügen Sie dem Schlüssel 0 den Schriftnamen als Wert hinzu. Hinweis: Der Name der Schriftart kann von der Schriftartdatei abweichen.
- Rufen Sie den benutzerdefinierten hinzugefügten Schriftartnamen mit dem folgenden Snippet ab
[ Swift 3 ]
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
[ Ziel - C ]
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Family name: %@", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"--Font name: %@", fontName);
}
}
Benutzerdefinierte Schriftarten mit Storyboard
Benutzerdefinierte Schriftarten für UI-Komponenten aus dem Storyboard können mit benutzerdefinierten Laufzeitattributen in Storyboard und Kategorien problemlos erstellt werden.
Die Vorteile sind wie
- Es müssen keine Auslässe für das Ui-Element definiert werden
- Es ist nicht erforderlich, die Schriftart für Elemente programmgesteuert festzulegen.
Schritte zum folgen
Font - Datei: Fügen Sie die Font - Datei (.ttf) mit dem Anwendungspaket und den Eintrag für die Schriftart in Info.plist unter Font durch Anwendung wie in diesem bereitgestellt hinzufügen Dokumentation individueller Schriftarten.
Kategorien definieren: Fügen Sie eine Datei wie UIKit + IBExtensions hinzu und fügen Sie die Kategorien für UI-Elemente wie UILabel, UIButton usw. hinzu, für die Sie eine benutzerdefinierte Schriftart festlegen möchten. Alle Kategorien verfügen über eine benutzerdefinierte Eigenschaft, beispielsweise fontName . Dies wird später im Storyboard zum Festlegen der benutzerdefinierten Schriftart verwendet (wie in Schritt 4).
UIKit + IBExtensions.h
#import <UIKit/UIKit.h>
//Category extension for UILabel
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UITextField
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UIButton
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
- Getter und Setter: Definieren Sie für jede hinzugefügte Kategorie Getter und Setter für die Eigenschaft fontName.
UIKit + IBExtensions.m
#import "UIKit+IBExtensions.h"
@implementation UILabel (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UITextField (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UIButton (IBExtensions)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName{
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
- Festlegen der Schriftart im Storyboard: Fügen Sie in den benutzerdefinierten Laufzeitattributen einen Eintrag mit fontName als keyPath und den Namen Ihrer benutzerdefinierten Schriftart als Typ mit dem Typ String als Zeichenfolge hinzu.
Dadurch wird Ihre benutzerdefinierte Schriftart festgelegt, während Sie die App ausführen.
Anmerkungen:
- Lato-Regular ist die benutzerdefinierte Schriftart, die ich verwendet habe.
- Der gleiche Name in der im Bundle hinzugefügten .ttf- Datei sollte ohne Erweiterung im Storyboard verwendet werden.
- Die Schriftgröße ist dieselbe wie im Attribut-Inspektor des Oberflächenelements definiert.
Anwenden benutzerdefinierter Schriftarten auf Steuerelemente in einem Storyboard
Das folgende Beispiel zeigt, wie Sie benutzerdefinierte Schriftarten auf eine Navigationsleiste anwenden, und enthält Korrekturen für einige schrullige Verhaltensweisen in Xcode. Sie können die benutzerdefinierten Schriftarten auch auf andere UIControls wie UILabels , UIButtons usw. anwenden , indem Sie den Attributinspektor verwenden, nachdem die benutzerdefinierte Schriftart dem Projekt hinzugefügt wurde. Bitte beachten Sie die externen Links zu Arbeitsproben und Videos im unteren Bereich.
- Wählen Sie Ihre Navigationsleiste in Ihrem Navigationscontroller aus
- Ändern Sie die Titelschriftart im Bereich "Attribute"
(Sie müssen wahrscheinlich den Balkenfarbton für die Navigationsleiste umschalten, bevor Xcode die neue Schriftart aufnimmt.)
Hinweise (Vorsichtsmaßnahmen)
Verifiziert, dass dies unter Xcode 7.1.1+ funktioniert. ( Siehe die Beispiele unten )
- Sie müssen den Farbton der Nav-Leiste umschalten, bevor die Schrift wirksam wird (scheint in Xcode ein Fehler zu sein; Sie können sie auf die Standardeinstellung zurücksetzen und die Schrift bleibt hängen).
- Wenn Sie eine Systemschriftart auswählen ~ Stellen Sie sicher, dass die Größe nicht 0.0 ist (andernfalls wird die neue Schriftart ignoriert).
- Anscheinend funktioniert das problemlos, wenn sich nur eine NavBar in der Ansichtshierarchie befindet. Es scheint, dass sekundäre NavBars im selben Stack ignoriert werden. (Wenn Sie die navBar des Master-Navigationscontrollers anzeigen, werden alle anderen benutzerdefinierten navBar-Einstellungen ignoriert.)
Gotchas (deux)
Einige davon wiederholen sich, was sehr wahrscheinlich eine Bemerkung wert ist.
- Manchmal wird das Storyboard-XML beschädigt. Dazu müssen Sie die Struktur im Storyboard als Quellcode-Modus überprüfen (Rechtsklick auf die Storyboard-Datei> Öffnen als ...).
- In einigen Fällen wurde das mit dem benutzerdefinierten Laufzeitattribut verknüpfte navigationItem-Tag anstelle des view controller-Tags als untergeordnetes XML-Element des view-Tags festgelegt. Wenn dies der Fall ist, entfernen Sie es zwischen den Tags, um einen ordnungsgemäßen Betrieb zu gewährleisten.
- Schalten Sie den NavBar-Farbton um, um sicherzustellen, dass die benutzerdefinierte Schriftart verwendet wird.
- Überprüfen Sie den Größenparameter der Schriftart, sofern Sie keinen dynamischen Schriftstil verwenden
- Ansichtshierarchie überschreibt die Einstellungen. Es scheint, dass eine Schriftart pro Stapel möglich ist.
Ergebnis
Proben
- Video, das mehrere Schriftarten im erweiterten Projekt zeigt
- Einfacher Quelldownload
- Erweiterter Projekt-Download ~ Zeigt mehrere NavBar-Schriften und Workaround für benutzerdefinierte Schriften
- Video mit mehreren Schriftarten und benutzerdefinierten Schriftarten
Umgang mit benutzerdefinierten Schriftarten
Hinweis ~ Eine nette Checkliste ist auf der Code With Chris-Website zu finden und Sie können das Beispiel-Download-Projekt sehen.
Wenn Sie eine eigene Schriftart haben und diese in Ihrem Storyboard verwenden möchten, finden Sie in der folgenden SO-Frage eine anständige Antwort. Eine Antwort identifiziert diese Schritte.
- Erhalten Sie Ihre benutzerdefinierte Schriftartdatei (.ttf, .ttc)
- Importieren Sie die Schriftdateien in Ihr Xcode-Projekt
- Fügen Sie in app-info.plist einen Schlüssel mit dem Namen "Fonts" hinzu, der von der Anwendung bereitgestellt wird. Fügen Sie dem Array alle Array-Dateinamen hinzu. Anmerkung: einschließlich der Dateierweiterung.
- Klicken Sie im Storyboard in der Navigationsleiste auf den Attributinspektor, und klicken Sie auf die Schaltfläche mit dem rechten Symbol im Bereich zur Auswahl von Schriftarten.
Umgehung der benutzerdefinierten Schriftart
Daher sieht Xcode natürlich so aus, als könnte er mit benutzerdefinierten Schriftarten in UINavigationItem umgehen, diese Funktion wird jedoch nicht ordnungsgemäß aktualisiert (die ausgewählte Schriftart wird ignoriert).
Um dieses Problem zu umgehen:
Eine Möglichkeit besteht darin, die Verwendung des Storyboards und das Hinzufügen einer Codezeile zu korrigieren: Fügen Sie dem View Controller zunächst eine UIView (UIButton, UILabel oder eine andere UIView-Unterklasse) hinzu (nicht das Navigationselement ...) Das). Nachdem Sie das Steuerelement hinzugefügt haben, können Sie die Schriftart im Storyboard ändern und Ihrem View Controller eine Referenz als Auslass hinzufügen. Weisen Sie diese Ansicht einfach der UINavigationItem.titleView zu. Sie können den Textnamen ggf. auch im Code festlegen. Gemeldeter Fehler (23600285).
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
Hinweis - Dieses Beispiel ist von einer Antwort abgeleitet, die ich zu SO ( hier ) gepostet habe.