引言:

看腻了清一色默认的App字体,换一个个性化体验也是不错的选择.

参考:

​http://www.16kan.com/post/218270.html​

字体在哪?

Mac 有一款自带App叫做字体册.  打开这个应用以后,可以看到目前内置在系统中的字体,iOS支持显示的格式有两种,分别是otf 和ttf.

首选是otf


iOS 自定义字体_字体

如何配置?

第一步:

将要使用的字体拖动到项目中.

第二步:

在Info.plist中添加Fonts provided by application项,加入一个item值为刚刚添加的字体文件文件名.

如何使用?

使用时要注意,字体文件名称,并非真正使用时的名称.

真正的名称在字体册的查看某一字体的详细参数时可以看到.如下图:


iOS 自定义字体_application_02

或者根据字体文件在应用中的路径通过代码来获得(不是特别准,可能偶尔需要手动调整):


1. NSString *fontPath = [[NSBundle mainBundle] pathForResource:fontFileNameArray[i] ofType:nil];  
2. NSURL *url = [NSURL fileURLWithPath:fontPath];
3.
4. CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);
5. if (fontDataProvider == NULL)
6. {
7. break;
8. }
9.
10. CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
11. CGDataProviderRelease(fontDataProvider);
12. if (newFont == NULL)
13. {
14. break;
15. }
16. CFStringRef fontName = CGFontCopyFullName(newFont);
17.
18. NSString *fontNameString = (__bridge id)(fontName);
19. if ([fontNameString isEqualToString:@"Yuppy SC Regular"]) {
20. "YuppySC-Regular";
21. }
22. [fontNameMDic setObject:fontNameString forKey:fontFileNameArray[i]];
23.
24. CFRelease(fontName);
25. CGFontRelease(newFont);


以下代码可以遍历出目前在iOS系统中可以使用的字体名称



1. NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];  
2. NSArray *fontNames;
3. NSInteger indFamily, indFont;
4. for(indFamily=0;indFamily<[familyNames count];++indFamily)
5. {
6. "Family name: %@", [familyNames objectAtIndex:indFamily]);
7. fontNames =[[NSArray alloc]initWithArray:[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];
8. for(indFont=0; indFont<[fontNames count]; ++indFont)
9. {
10. " Font name: %@",[fontNames objectAtIndex:indFont]);
11. }
12. }



总结:

唯一不好处是字体的数据包很占用App的体积. 这个问题,有待解决.