8

カスタムフォントをUIAppFontsに追加しましたが、正常に読み込まれます:(に表示されます[UIFont familyNames])。手動でフォントを設定すると、viewDidLoad { [myLabel setFont: [UIFont fontWithName:@"CustomFont" size: 65.0]]; } すべてが機能し、フォントがレンダリングされます。

ただし、IBで同じことを行うと、そうではありません(代わりに他のデフォルトフォントが使用されます)。ラベルごとにIBOutletsを作成し、viewDidLoadでフォントを手動で修正するのはかなり面倒です。

他の誰かがカスタムフォントサポートを3.2SDKとIBで動作させるのに問題がありましたか?

4

3 に答える 3

2

同様の問題がありました。このように修正しました...

カスタムフォントをリソースグループに追加します。次に、以下のコードですべてのフォントをロードします。

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

それがうまくいくことを願っています。

于 2010-06-08T07:28:45.420 に答える
2

Apple にバグ レポートを開いたところ、実際にはバグであることが判明しました。私が最終的に使用した回避策は次のとおりです。

// 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

私たちのブログでもう少し長い記事を書きました。

于 2010-05-19T08:57:20.200 に答える
1

サブクラス化する必要がない場合、このソリューションは私にとっては迅速かつ汚いものでした。もちろん、すべてのラベルのフォントが同じであることを前提としていますが、私の場合はそうでした。

for (UIView *v in view.subviews) {

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

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

これをヘルパー クラスに入れて呼び出し、現在のビューを渡しました。

于 2011-01-05T09:06:12.953 に答える