2010-05-10 13 views
8

Ich habe meine benutzerdefinierte Schriftart zu UIAppFonts hinzugefügt und es ist gut geladen: (zeigt sich in [UIFont familyNames]). Wenn ich die Schriftart in viewDidLoad { [myLabel setFont: [UIFont fontWithName:@"CustomFont" size: 65.0]]; } manuell einstelle, funktioniert alles und die Schriftart wird gerendert.iPhone SDK 3.2 und UIAppFonts

Allerdings tut das gleiche in IB nicht (eine andere Standardschriftart wird stattdessen verwendet). Das Erstellen von IBOutlets für jedes Etikett und das manuelle Reparieren der Schriften in viewDidLoad ist ziemlich schmerzhaft.

Hat noch jemand Probleme gehabt, die benutzerdefinierte Schriftartunterstützung mit 3.2 SDK und IB zu arbeiten?

Antwort

2

Eröffnet einen Fehlerbericht mit Apple und stellt sich heraus, es ist wirklich ein Fehler. Die Abhilfe, die ich am Ende mit, ist dies:

// LabelQuake.h 
@interface LabelQuake : UILabel 
@end 

// LabelQuake.m 
@implementation LabelQuake 

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

     return self; 
    } 
@end 

etwas länger Beitrag in unserer blog Schrieb.

+0

Wenn Sie Ihre Lösung oben verwenden, funktioniert es aus irgendeinem Grund, aber alle benutzerdefinierten Beschriftungen zentrieren den Text nicht vertikal im Etikett - stattdessen fangen alle den Text an der Spitze. Hast du das bemerkt? Es hat den Effekt, dass alle meine Etiketten ausgeglichen werden und alles aus der Reihe fällt. – Andrew

+1

Als Antwort auf meinen eigenen Kommentar "habe" ich das Problem "behoben", indem ich self.font.saccender überprüft habe, bevor ich die neue Schriftart eingestellt habe, und dann die gesamte Beschriftung um den Unterschied _nach_ der Schrifteinstellung verschoben habe. – Andrew

2

hatte simillar Art problem.and es auf diese Weise fixiert ...

meiner Ressourcengruppe meine eigene Schriftart hinzufügen. Dann laden Sie alle Schriften mit dem folgenden Code:

- (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;} 


- (id)initWithCoder:(NSCoder *)decoder { 
    //load the fonts 
    [self loadFonts]; 

    if (self = [super initWithCoder: decoder]) { 
     [self setFont: [UIFont fontWithName: @"Quake" size: self.font.pointSize]]; 
    } 

    return self; 
} 

Ich hoffe, es wird funktionieren.

+1

hat Ihre Fonts nicht zur UIAppFonts-Eigenschaft in Info.plist hinzugefügt, weil sie geladen wurden? – Tarmo

+0

kann sein ... aber es funktioniert für mich .... – makboney

+0

dieser kleine hack hast du hier macht mich sehr glücklich :) Mit diesem kann ich benutzerdefinierte Schriftarten mit Leichtigkeit beim Targeting iOS <3.2. Verwendet es ein privates Framework? –

1

Wenn Sie keine Unterklasse haben wollen, hat diese Lösung für mich schnell und schmutzig funktioniert. Natürlich geht es davon aus, dass alle Labels die gleiche Schriftart haben, und in meinem Fall war das der Fall.

for (UIView *v in view.subviews) { 

    if ([v isKindOfClass:[UILabel class]]) { 
     UILabel *label = (UILabel*)v; 

     [label setFont:[UIFont fontWithName:@"Quake" size:label.font.pointSize]]; 
    } 
} 

Ich legte dies in eine Hilfsklasse und nannte es einfach, vorbei an meiner aktuellen Ansicht.

+0

anstatt JEDE Schriftart zu ändern. würde das UIView.tag für nur die Etiketten einstellen, die Sie ändern möchten, und dann in dieser Schleife zu überprüfen, funktioniert auch –