webentwicklung-frage-antwort-db.com.de

Benutzerdefinierte Schrift in ios funktioniert nicht

Ich möchte HelveticaNeue-UltraLight in meiner ios-Anwendung verwenden. Ich füge die Schriftdatei als Ressource zu meinem Projekt hinzu und füge den Schlüssel "Schriftarten bereitgestellt durch Anwendung" in der Plist-Datei hinzu. Der Dateiname lautet HelveticaNeue.dfont und ich habe ihn dem Schlüsselarray hinzugefügt.

Wenn ich nach den verfügbaren Schriftarten suche, kann ich es jetzt sehen ...

  NSArray *fonts = [UIFont fontNamesForFamilyName:@"Helvetica Neue"];

for(NSString *string in fonts){
    NSLog(@"%@", string);
}

1-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-Bold
2011-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-CondensedBlack
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue-Medium
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-Light
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-CondensedBold
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-LightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLight // HERE IT IS!
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-BoldItalic
2011-07-08 17:32:57.870 myApp[5159:207] HelveticaNeue-Italic

Aber wenn ich versuche, es mit [UIFont fontWithName: @ "HelveticaNeue-UltraLight" Größe: 12] zu bekommen, bekomme ich nur HelveticaNeue-Light.

Ich bekomme keine Fehler oder Warnungen. Bitte helfen!

40
the Reverend

Die Datei muss nicht nur zum Projekt hinzugefügt werden, sondern auch zum Ziel. 

Manchmal (wie in meinem Fall) wird beim Ziehen und Ablegen der ".ttf" -Datei in Xcode "Zum Ziel hinzufügen" nicht geprüft. Dies bedeutet, dass die Datei tatsächlich in Ihrem Projekt sichtbar ist, aber nicht in die App eingebettet ist.

Um sicher zu gehen, dass es ist:

  • Klicken Sie auf den Namen des Projekts (linker Bereich). 
  • Dann auf das Ziel (mittlerer Bereich)
  • Dann "Build Phases" (dritte Registerkarte im rechten Fensterbereich) 
  • Dann "Bundle-Ressourcen kopieren"

Sie sollten die Schriftartdatei in dieser Liste sehen.

99
Ben G

Ich denke, Sie haben das gleiche Problem wie ich: Es gibt einen Fehler in iOS, bei dem nicht mehr als zwei Schriftarten aus derselben Familie verwendet werden können.

Weitere Informationen und Lösungen finden Sie hier im Blog-Post: http://www.pixeldock.com/blog/uifont-problem-wenn-mit-mehr-als- als- 2 -einer benutzerdefinierten Familie der Familie/

nach dem Hinzufügen der Font-Datei in Bundle "Font Provided by Application" property klicken Sie auf den Dropdown-Pfeil und geben Sie Ihren Namen mit der Erweiterung ein

9
Baljeet Singh

Öffnen Sie die Anwendung Font Book. Wenn Sie die Schriftarten selbst installiert haben, wechseln Sie zu Benutzer, suchen Sie nach den gewünschten Schriftarten und verwenden Sie den PostScript-Namen der Schrift in Ihrem Xcode-Projekt.

Es sollte sogar für verschiedene Schriftvarianten derselben Familie funktionieren.

8
andresousa

Es arbeitet mit verschiedenen Variationen derselben Schriftart (sogar in IOS 8). Ich poste meinen Fehler nur für den Fall, dass jemand das gleiche Problem hat ... Ich habe den Dateinamen von font anstelle des Schriftartnamens verwendet .. Eine nützliche Lösung ist, alle verfügbaren Schriftarten auszudrucken und nach dem zu suchen, der ich war mit. In Swift wäre:

for fontFamilyNames in UIFont.familyNames {
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyNames) {
        print("FONTNAME:\(fontName)")
    }
}

Ich habe dieses nützliche Tutorial gefunden in: Code with Chris

7
TomCobo

Das hilft dem OP zwar nicht, aber es kann für andere nützlich sein. 

Bei iOS 5 wird automatisch Helvetica Neue eingefügt. Sie müssen diese benutzerdefinierte Schriftart nicht zum Bundle hinzufügen. Es ist sogar möglich, diese Schriftfamilie direkt aus dem Interface Builder zu verwenden, was sehr praktisch ist.

3
sho

Versuchen Sie dies, dies wird auch für Sie hilfreich sein.

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
2
vishiphone

Am Ende kaufte ich die Schriftart Helvetica Neue UltraLight von einem Drittanbieter und fügte sie ohne Probleme hinzu.

1
the Reverend

Versuchen Sie es mit Leerzeichen:

[UIFont fontWithName:@"Helvetica Neue UltraLight" size:12];

Siehe Bestimmte Schriftarten werden nicht angezeigt?

1
Jano

Nach Stunden habe ich erfahren, dass der Name der hinzuzufügenden Schriftart nicht der Dateiname der Schriftart ist, sondern der tatsächliche Name der Schriftart. Ich habe versucht, die Schriftdatei bonveno.ttf einzuschließen. Ich habe den Dateinamen zusammen mit der Erweiterung in info.plist eingefügt und konnte die Schriftart in der Liste Copy Bundle Resources sehen. Mein Code war wie

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

das verursachte das Problem. Dann habe ich aus Finder auf die Schriftartdatei geklickt, um die Vorschau der Schriftart anzuzeigen. Damals bemerkte ich den Namen der Schrift im Vorschaufenster als BonvenoCF . Also habe ich diesen Namen gerne in den Code eingefügt

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

Arbeitete wie Charme !! Ohne diese niedliche Schrift in meinen Apps kann ich nicht leben.

1
Sayka

Zusätzlich zu dem gut erklärten @ Ben-Antwort , wenn Sie immer noch keine Schriftarten erhalten, verwenden Sie einfach eine beliebige Label in einer Ihrer Storyboard, Sie erhalten es mit dieser Code

Wenn Sie die Schriftart mit [UIFont fontWithName:@"Font-Regular" size:11]; Immer noch nicht abrufen können, muss ein Problem bei der Benennung vorliegen. Halten Sie an einem beliebigen Haltepunkt im Debugger an und debuggen Sie ihn unter verschiedenen Namen. Sehen Sie, welches po Objekt gedruckt wird, das nicht nil ist.

po [UIFont fontWithName: @ " FontRegular" size: 11];

oder

po [UIFont fontWithName: @ " Font Regular" size: 11];

oder

po [UIFont fontWithName: @ " Font-Regular" size: 11];

Sie erhalten <UICTFont: 0x7fe2044021d0> font-family: "Interstate-Regular"; font-weight: normal; font-style: normal; font-size: 11.00pt Für den tatsächlichen Schriftnamen, andernfalls erhalten Sie nil

0
Baig

Um benutzerdefinierte Schriftarten in iOS zu verwenden, fügen Sie Ihre Zeichensätze einfach per Drag & Drop in Ihr Projekt ein. Erwähnen Sie das Array der Schriftnamen mit der Erweiterung in Info.plist mit dem Schlüssel "Von der Anwendung bereitgestellte Schriftarten". Dann drucken Sie alle Schriftfamiliennamen mit dem folgenden Code aus:

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

Konsolendruck:

Arial Hebrew ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri Calibri-Bold Calibri

Georgia Georgia-BoldItalic Georgia-Bold Georgia-Italic Georgia

Dann erhalten Sie von der Konsole aus die tatsächlichen Namen der Schrift (wie oben). Verwenden Sie den folgenden Code, um eine Schrift zu erstellen -

Im Kerntext: 

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL);

In UIKit:

UIFont *font = [UIFont fontWithName:fontName size:10];

Hinweis: Hier ist fontName = @ "Calibri-Bold" ohne Erweiterung.

0
Mahesh

Eine andere Sache, die Sie überprüfen sollten, ist auf einem Mac: Öffnen Sie die App Font Book. Dann gehe zu Datei -> Dateiüberprüfung und öffne die Schrift. Wenn etwas fehlschlägt (sogar mit einer Warnung), lehnt iOS das Laden der Schriftart in der App im Allgemeinen ohne Fehler ab. 

Wenn dies der Fall ist, können Sie die Fehler beheben, indem Sie die Schriftart in einer kostenlosen App mit dem Namen "Typelight" öffnen und die Schriftart "Speichern unter" erneut speichern.

0

Zusätzlich zu:

  • hinzufügen der Namen der Schriftartendatei zur info.plist unter "Von application bereitgestellte Schriftarten"
  • hinzufügen der tatsächlichen Dateien zum Projekt.

Sie müssen auch sicherstellen, dass unter Ziele -> Phasen erstellen -> Ressourcen kopieren die tatsächlichen Dateinamen der benutzerdefinierten Schriftarten enthält. 

Um zu überprüfen, ob sie erschienen sind, können Sie Folgendes tun:

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
0
azwethinkweiz