添加自定义字体到iOS应用程序find他们的真实姓名

我有两个字体添加在我的应用程序使用。

这是字体图像。 目前这些文件被命名为

name.font = [UIFont fontWithName:@"Helvetica Neue LT Pro-Medium" size:10]; headline.font = [UIFont fontWithName:@"Helvetica Neue LT Pro-Light" size:8]; 

把相同的名字Font Avaliable option in plist file中的Font Avaliable option in plist file

我也尝试添加文件名称

 HelveticaNeueLTPro-Lt HelveticaNeueLTPro-Md 

但似乎没有任何工作。 我怎样才能得到字体的确切名称。

在这里输入图像描述

使用+[UIFont familyNames]列出系统已知的所有字体系列名称。 对于每个姓氏,您可以使用+[UIFont fontNamesForFamilyName:]列出系统已知的所有字体名称。 尝试打印出来,看看系统预期的名称。 示例代码:

 static void dumpAllFonts() { for (NSString *familyName in [UIFont familyNames]) { for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { NSLog(@"%@", fontName); } } } 

把它放在你的应用程序中,调用它,看看你得到了什么。 如果在输出中看到与您的字体相符的名称,请使用它。 否则,也许你没有正确地将字体添加到您的应用程序。

这是步骤,如何在应用程序中添加自定义字体。

1 – 在您的应用程序中添加.TTF字体
2 – 修改application-info.plist file
3 – 将“应用程序提供的字体”键添加到新行
4 – 并将每个.TTF文件(的字体)添加到每一行。

另请阅读本教程和本教程,以提高您的知识水平。

了解更多信息 :

但是在向应用程序添加字体之后,有时可能是字体名称不是文件名的名称,所以您需要应用/写入字体的实际名称,所以请检查@ NSGod的答案。

以下是查找系统中所有字体的代码:

 for(NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"Family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'",fontName); } NSLog(@"~~~~~~~~"); } 

可能是上面的步骤和build议是有帮助的你的情况:

虽然看起来UIFontfontNamed:size:方法相当宽容您提供的名称,但官方fontName一直是字体的内部PostScript名称。 字体的PostScript名称不能包含空格,并且通常将其replace为连字符。 我不记得,但我相信他们也可能只限于31个字符。

确定你应该在代码中使用什么名字是非常简单的。 双击您要在iOS设备上使用的字体,在Font Book中打开它。 如果字体尚未安装,请在出现的示例窗口中单击安装button。 安装后,在字体列表中select字体。 在字体的菜单中,select预览>显示字体信息。 这将显示如下图所示的字体信息:

在这里输入图像描述

正如您所看到的, Helvetica Neue LT Std 65 Medium的PostScript名称是HelveticaNeueLTStd-Md 。 这是你应该在代码中使用的名称。

在您的Info.plist文件中,在应用程序的字体下,您需要使用字体本身的实际文件名,无论发生什么情况。 就我而言,这是HelveticaNeueLTStd-Md.otf

更容易的方法来获取字体的名称

  1. 用鼠标右键单击您的.ttf / .otf文件并select“获取信息”
  2. 阅读Full Name属性并将其用作字体的名称

它可以在信息.plist文件( 添加扩展名 )和代码中使用[UIFont fontWithName:<Full Name> size:17]

只是NSLog你想要的字体得到:

NSLog(@" %@", [UIFont fontNamesForFamilyName:@"American Typewriter"]);

你得到的数组:

 ( "AmericanTypewriter-CondensedLight", "AmericanTypewriter-Light", "AmericanTypewriter-Bold", AmericanTypewriter, "AmericanTypewriter-CondensedBold", "AmericanTypewriter-Condensed" ) 

使用任何你需要的代码任何字体名称AmericanTypewriter-Bold [UIFont fontWithName:@"AmericanTypewriter-Bold" size:12.0]

你也可以得到所有应用字体按字体家族分组

 for (NSString* family in [UIFont familyNames]) { NSLog(@"%@", family); for (NSString* name in [UIFont fontNamesForFamilyName: family]) { NSLog(@" %@", name); } } 

我写了一些代码,只打印出你想要的字体名称,而不只是打印出所有的字体。

 - (NSString *)realNameOfFont:(NSString *)fullFontName { NSString *fontName = [[fullFontName componentsSeparatedByString:@"."] firstObject]; NSString *ext = [fullFontName pathExtension]; NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fontName ofType:ext]]; if (data == nil) { NSLog(@"Failed to load font. Data at path %@ is null", fullFontName); return nil; } CFErrorRef errorRef; CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data); CGFontRef font = CGFontCreateWithDataProvider(provider); NSString *realFontName = (__bridge NSString *)CGFontCopyPostScriptName(font); if (!CTFontManagerRegisterGraphicsFont(font, &errorRef)) { NSError *error = (__bridge NSError *)errorRef; if (error.code != kCTFontManagerErrorAlreadyRegistered) { NSLog(@"Failed to load font: %@", error); } } NSLog(@"Real font name: %@", realFontName); CFRelease(font); CFRelease(provider); return realFontName; } 

例:

  NSArray *fonts = @[@"bg_en_AmaticSC-Bold111.otf", @"bg_en_segoescb_0.ttf", @"bg_en_UTM Cookies_2.ttf", @"bg_en_VSCOProximaExtrabold_0.otf"]; for (NSString *fontFullName in fonts) { [self realNameOfFont:fontFullName]; } 

结果:

 Failed to load font. Data at path bg_en_AmaticSC-Bold111.otf is null Real font name: SegoeScript-Bold Real font name: UTM-Cookies Real font name: ProximaNova-Extrabld 

其他答案没有错。 事实上,iPatel的先决条件仍然适用。

在Swift 2.2+中,显示姓氏的电话很简单:

  UIFont.familyNames().sort().forEach({ (familyName) in debugPrint(UIFont.fontNamesForFamilyName(familyName)) }) 

如果您已经在系统上安装了字体,您还可以简单地将字体添加到故事板中的UI元素。

注意

但是,在某些情况下,我注意到一个错误,那就是在将这些字体正确添加到故事板中的项目,info.plist和UI元素之后,它们仍然不能正确反映出您所需的更改。 在某些情况下,切换设置将有助于Storyboard同步它的基础XML。 在其他情况下,您可能需要更新代码中自定义字体的大小以使更改生效。 Swift中我find的最简单的方法是:

 @IBOutlet weak var startMessage: UILabel! startMessage.font = UIFont(name: startMessage.font.familyName, size: 31.0) 

这假定自定义字体已经在故事板中设置,并简单地更新代码中的大小。 此解决方法将确保如果满足所有其他先决条件,您实际上看到正确的自定义字体。 它也消除了实际知道底层字体名称的必要(尽pipe如果需要的话,上面的最初的Swift代码会给出你的名字)。

Swift版本:

 static func printAllFontNames() { for familyname in UIFont.familyNames() { for fname in UIFont.fontNamesForFamilyName(familyname) { print(fname) } } } 

Swift 3版本:

 UIFont.familyNames.sorted().forEach({ (familyName) in print(UIFont.fontNames(forFamilyName: familyName)) }) 

更新为swift 3

 for familyname in UIFont.familyNames { for fname in UIFont.fontNames(forFamilyName: familyname) { print(fname) } }