792 Stimmen

Kann ich eine benutzerdefinierte Schriftart in ein iPhone-Programm einbetten?

Ich möchte, dass eine Anwendung eine benutzerdefinierte Schriftart für das Rendern von Text, laden Sie es, und verwenden Sie es dann mit Standard UIKit Elemente wie UILabel . Ist dies möglich?

5 Stimmen

In einer der CS193p-Vorlesungen (iPhone Application Development) in Stanford stellte Evan fest, dass die Installation einer eigenen Schriftart auf einem Gerät "eine Menge Arbeit" ist, was zumindest bedeutet, dass es möglich ist :-)

2 Stimmen

IPhone 3.2 erlaubt benutzerdefinierte Schriftarten, aber nur für das iPad (siehe Antwort unten)

6 Stimmen

Am Ende habe ich Bilder verwendet.

646voto

samvermette Punkte 39991

IOS 3.2 und höher unterstützen dies. Direkt aus dem Was ist neu in iPhone OS 3.2? doc:

Unterstützung für benutzerdefinierte Schriften
Anwendungen, die benutzerdefinierte Schriftarten verwenden möchten, können diese nun in ihr Anwendungspaket aufnehmen und diese Schriftarten beim System registrieren, indem sie den Schlüssel UIAppFonts in ihre Datei Info.plist aufnehmen. Der Wert dieses Schlüssels ist ein Array von Zeichenketten, die die Schriftartendateien im Bündel der Anwendung identifizieren. Wenn das System den Schlüssel erkennt, lädt es die angegebenen Schriftarten und macht sie für die Anwendung verfügbar.

Sobald die Schriftarten in der Datei Info.plist können Sie Ihre benutzerdefinierten Schriftarten wie jede andere Schriftart in IB oder programmgesteuert verwenden.

Es gibt einen laufenden Thread in den Apple Developer Foren:
https://devforums.apple.com/thread/37824 (Anmeldung erforderlich)

Und hier ist eine exzellente und einfache 3-Schritte-Anleitung, wie man dies erreichen kann (defekter Link entfernt)

  1. Fügen Sie Ihre benutzerdefinierten Schriftdateien mit Xcode als Ressource in Ihr Projekt ein
  2. Fügen Sie einen Schlüssel zu Ihrem Info.plist Datei namens UIAppFonts .
  3. Diesen Schlüssel zu einem Array machen
  4. Geben Sie für jede Schriftart, die Sie haben, den vollständigen Namen der Schriftartdatei (einschließlich der Erweiterung) als Elemente in das Feld UIAppFonts Array
  5. Speichern Sie Info.plist
  6. Jetzt können Sie in Ihrer Anwendung einfach Folgendes aufrufen [UIFont fontWithName:@"CustomFontName" size:12] um die benutzerdefinierte Schriftart für die Verwendung mit Ihrer UILabels y UITextViews , etc

Außerdem: Vergewissern Sie sich, dass die Schriftarten in den Ressourcen des Kopierpakets enthalten sind.

1 Stimmen

FontLabel (1. Antwort) ist das, was ich für ältere Betriebssysteme verwende.

14 Stimmen

Hier ist eine Schritt-für-Schritt-Anleitung für iOS4: blog.beefyapps.com/2010/06/angepasste-schriftarten-in-ios-4

0 Stimmen

Ich bin mir nicht sicher, warum Sie glauben, dass dies nur für das iPad funktioniert. Die Dokumentation, die Sie oben zitieren, hat eine weitere Zeile: "Diese Taste wird ab iOS 3.2 unterstützt." Ich habe es gerade in meiner iPhone-App implementiert und es funktioniert gut.

299voto

commanda Punkte 4813

Bearbeiten: Ab iOS 3.2 ist diese Funktionalität integriert. Wenn Sie vor 3.2 unterstützen müssen, können Sie diese Lösung weiterhin verwenden.

Ich habe ein einfaches Modul erstellt, das die UILabel und übernimmt das Laden von .ttf-Dateien. Ich habe es als OpenSource unter der Apache-Lizenz veröffentlicht und auf Github gestellt Hier.

Die wichtigsten Dateien sind FontLabel.h y FontLabel.m .

Es verwendet einen Teil des Codes aus Genericrichs Antwort .

Durchsuchen Sie die Quelle Hier.

OR

  • Kopieren Sie Ihre Schriftdatei in die Ressourcen

  • Fügen Sie einen Schlüssel zu Ihrem Info.plist Datei namens UIAppFonts. ("Von der Anwendung bereitgestellte Schriftarten)

  • Diesen Schlüssel zu einem Array machen

  • Geben Sie für jede Schriftart, die Sie haben, den vollständigen Namen Ihrer Schriftartdatei (einschließlich der Erweiterung) als Elemente in das Array UIAppFonts ein

  • Speichern Sie Info.plist

  • Jetzt können Sie in Ihrer Anwendung einfach Folgendes aufrufen [UIFont fontWithName:@"CustomFontName" size:15] um die benutzerdefinierte Schriftart für die Verwendung mit Ihrer UILabels y UITextViews , etc

Für weitere Informationen

2 Stimmen

Ich habe versucht, Ihren Code zu verwenden, aber er stürzt je nach Schriftart ziemlich oft ab. Versuchen Sie zum Beispiel, die Schriftarten African oder Tiki von hier zu verwenden fontspace.com/kategorie/tiki .

2 Stimmen

Diese Bibliothek funktioniert hervorragend. Ich brauche jedoch Hilfe bei den vertikalen Abständen. Ich kann nicht herausfinden, wie man das macht. Also habe ich diese message.numberOfLines = 3; Wie kontrolliere ich den vertikalen Abstand zwischen Zeile 1, Zeile 2 und Zeile 3? Vielen Dank, Tee

0 Stimmen

Wird diese Methode angewandt, müssen wir die Zeichnungslogik implementieren. Was, wenn wir t

116voto

alexey Punkte 8218

Es gibt eine einfache Möglichkeit, benutzerdefinierte Schriftarten in iOS 4 .

  1. Fügen Sie Ihre Schriftartdatei hinzu (z. B., Chalkduster.ttf ) an Ressourcen Ordner des Projekts in XCode.
  2. Öffnen Sie info.plist und fügen Sie einen neuen Schlüssel namens UIAppFonts . Der Typ dieses Schlüssels sollte Array sein.
  3. Fügen Sie den Namen Ihrer benutzerdefinierten Schriftart in dieses Array ein, einschließlich der Erweiterung ( Chalkduster.ttf ).
  4. Jetzt können Sie [UIFont fontWithName:@"Chalkduster" size:16] in Ihrer Bewerbung.

Leider ist es in IB nicht möglich, Etiketten mit benutzerdefinierten Schriftarten zu initialisieren. Siehe この質問 um dieses Problem zu lösen. Meine bevorzugte Lösung ist die Verwendung benutzerdefinierter UILabel Unterklasse:

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

3 Stimmen

Dies scheint bis 3.2 unterstützt zu werden, nicht nur bis 4.0+.

1 Stimmen

Danke! Das Problem, das ich habe, ist, dass benutzerdefinierte Schriftarten scheinen ein bisschen hoch (extra Raum unten) im Vergleich zu ihren eingebauten Gegenstücke schief. Ich habe versucht, mit der FontLabel Repo von GitHub, die einige der Zeit hilft, aber nicht die ganze Zeit.

12 Stimmen

Es ist erwähnenswert, dass die Zeichenkette, die Sie an den UIFont-Konstruktor übergeben, NICHT den Dateinamen abzüglich der Erweiterung den internen Namen der Schriftart. Ich hatte Probleme beim Laden einer Schriftart mit einem Dateinamen, den ich verkürzt hatte. Wenn ich den gesamten Namen der Schriftart, wie er in der Datei enthalten ist, verwendete, wurde die Schriftart problemlos geladen.

51voto

bdev Punkte 2029

Fügen Sie in Info.plist den Eintrag "Fonts provided by application" hinzu und fügen Sie die Schriftartennamen als Strings ein:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Überprüfen Sie dann, ob Ihre Schriftart enthalten ist, indem Sie :

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
         NSLog(@"%@", fontName);
    }
}

Beachten Sie, dass Ihr ttf-Dateiname möglicherweise nicht derselbe Name ist, den Sie verwenden, wenn Sie die Schriftart für Ihr Etikett festlegen (Sie können den obigen Code verwenden, um den Parameter "fontWithName" zu erhalten):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];

36voto

rpetrich Punkte 32030

edit: Diese Antwort ist seit iOS3.2 nicht mehr gültig; verwenden Sie UIAppFonts

Die einzige Möglichkeit, wie ich erfolgreich benutzerdefinierte Dateien laden kann, ist UIFont s erfolgt über das private GraphicsServices-Framework.

Im Folgenden werden alle .ttf Schriftarten im Hauptpaket der Anwendung:

BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    return newFontCount;
}

Sobald die Schriften geladen sind, können sie genau wie die von Apple bereitgestellten Schriften verwendet werden:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

GraphicsServices können sogar zur Laufzeit geladen werden, falls die API in Zukunft verschwindet:

#import <dlfcn.h>
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
    if (frameworkPath) {
        void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
        if (graphicsServices) {
            BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
            if (GSFontAddFromFile)
                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        }
    }
    return newFontCount;
}

0 Stimmen

Hinweis für diejenigen, die sich wundern, dies funktioniert, aber Sie müssen loadFonts direkt vor der Verwendung der Schriftart aufrufen -- sie scheinen nicht während der gesamten Anwendung geladen zu bleiben

0 Stimmen

In OS 3.0 müssen Sie auf jeden Fall die zweite zweite Beispiel verwenden, vergessen Sie nicht, den Import. Funktionierte ziemlich gut für mich.

0 Stimmen

Ein weiterer Hinweis: Es handelt sich um ein privates Framework, das dynamisch geladen wird... beides wird wahrscheinlich die Aufnahme Ihrer App in den AppStore verhindern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X