如何获取iOS应用程序中捆绑的字体名称?

时间:2013-09-01 02:07:40

标签: ios

我在Xcode app-info.plist的iOS应用程序中添加了一些自定义真实字体(使用“应用程序提供的字体”键)。

iOS会自动将它们识别为应用程序中的可用字体,我可以使用[UIFont familyNames]获取所有字体系列的名称,包括iOS提供的系统字体。

但我想知道哪些字体来自iOS系统字体,哪些字体来自我在捆绑中添加的自定义字体。

是否有任何编程方式可以将捆绑字体与系统字体区分开来,或者只是获取所有捆绑字体名称的方法?

1 个答案:

答案 0 :(得分:2)

这是从another answer中扯下来的 它应该为您提供捆绑字体中的所有字体名称。

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSArray* fontFiles = [infoDict objectForKey:@"UIAppFonts"];

for (NSString *fontFile in fontFiles) {
    NSLog(@"file name: %@", fontFile);
    NSURL *url = [[NSBundle mainBundle] URLForResource:fontFile withExtension:NULL];
    NSData *fontData = [NSData dataWithContentsOfURL:url];
    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)fontData);
    CGFontRef loadedFont = CGFontCreateWithDataProvider(fontDataProvider);
    NSString *fullName = CFBridgingRelease(CGFontCopyFullName(loadedFont));
    CGFontRelease(loadedFont);
    CGDataProviderRelease(fontDataProvider);
    NSLog(@"font name: %@", fullName);
}

这个答案可以为您提供正确的字体名称,但如果您只是想要信息plist中的字体名称:

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSArray *arrayOfFontStringNames = infoDict[@"UIAppFonts"];