List of Fonts Provided by Application (iOS)

前端 未结 2 704
庸人自扰
庸人自扰 2021-01-05 05:30

does anyone know how to get a list of custom fonts from the \'Fonts provided by application\' key in the info.plist file in Xcode? Thanks

相关标签:
2条回答
  • 2021-01-05 05:54

    You can add your costume font http://www.danielhanly.com/blog/tutorial/including-custom-fonts-in-ios/ enter image description here But, I don't, know how to get this list, sorry. But, may be you can look on it in IB, in UILabel attributes.

    0 讨论(0)
  • 2021-01-05 06:01

    The following code reads the list of custom font files from the Info.plist, and extracts the full font name from the font file. (Parts of the code is copied from https://stackoverflow.com/a/17519740/1187415 with small modifications and ARC adjustments).

    Objective-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 equivalent:

    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)
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题