应用程序提供的字体列表(iOS)

Posted

技术标签:

【中文标题】应用程序提供的字体列表(iOS)【英文标题】:List of Fonts Provided by Application (iOS) 【发布时间】:2013-08-18 11:46:29 【问题描述】:

有谁知道如何从 Xcode 中 info.plist 文件中的“应用程序提供的字体”键获取自定义字体列表? 谢谢

【问题讨论】:

你的问题是如何阅读 Info.plist 条目(这是一个字体列表文件名)?或者您是否需要字体名称(可以与文件名不同? 【参考方案1】:

以下代码从 Info.plist 中读取自定义字体文件列表, 并从字体文件中提取完整的字体名称。 (部分代码抄自https://***.com/a/17519740/1187415 稍作修改和 ARC 调整)。

目标-C

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);

相当于 Swift 3:

if let infoDict = Bundle.main.infoDictionary,
    let fontFiles = infoDict["UIAppFonts"] as? [String] 
    for fontFile in fontFiles 
        print("file name", fontFile)
        if let url = Bundle.main.url(forResource: fontFile, withExtension: nil),
            let fontData = NSData(contentsOf: url), 
            let fontDataProvider = CGDataProvider(data: fontData) 
            let loadedFont = CGFont(fontDataProvider)
            if let fullName = loadedFont.fullName 
                print("font name", fullName)
            
        
    

【讨论】:

太棒了!很聪明。这以一种智能的方式列出了字体,而不是 Mac 开发人员无法使用的惰性 UIFonts。谢谢!【参考方案2】:

你可以添加你的服装字体http://www.danielhanly.com/blog/tutorial/including-custom-fonts-in-ios/ 但是,我不知道如何获得这份清单,抱歉。 但是,也许你可以在 IB 中,在 UILabel 属性中查看它。

【讨论】:

感谢您的回答。我知道这一点,但我希望获得存储在该字段中的字体名称数组。你知道有什么办法吗? 不,我不知道任何快速解决方案。但我可以为您提供,从该页面 (support.apple.com/kb/HT5484) 复制字体名称,将它们添加到 .txt 文件中,将此文件添加到项目中,并使用 NSString 方法解析它并将循环添加到 Array。如果您对此感兴趣,请在其他问题中询问(它在 cmets 中的不同编写代码)

以上是关于应用程序提供的字体列表(iOS)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone SDK 字体

如何检查iOS版本中是否有字体?

Font BebasNeue不适用于iOS 11

Interface Builder 中的自定义字体

css 字体真棒列表图标(http://codepen.io/mburnette/pen/rdGJc)

iOS-Font(转)