我在之前的应用中使用了自定义字体。
文件名是“ProximaNova-Regular.otf”并加载我刚使用的字体...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
这很有效。
现在在这个新应用程序中我有三个字体文件......
Dude_Willie.otf
Impact
handsean.ttf
但我不确定如何加载这些。
我试过了
[UIFont fontWithName:<the file name> size:20];
但这只是回到使用Helvetica。
如何找到要使用的名称?
答案 0 :(得分:115)
右键点击TTF - &gt;获取信息
“全名”是您正在寻找的。 p>
这对TTF来说对我有用。
修改强>
我刚使用的字体与“获取信息”中的“全名”名称不同。
要编译此答案,如果上面的快速检查不起作用,请在项目中运行此代码:
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
并搜索您要使用的字体的正确名称。
Swift 3.0代码:
for fontFamilyName in UIFont.familyNames{
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
print("Family: \(fontFamilyName) Font: \(fontName)")
}
}
答案 1 :(得分:58)
按照以下四个简单步骤在iOS应用中添加和使用新字体:
UIAppFonts
数组(此文本的纯文本)是'由应用程序提供的字体')for(NSString *fontfamilyname in [UIFont familyNames]) { NSLog(@"family:'%@'",fontfamilyname); for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) { NSLog(@"\tfont:'%@'",fontName); } NSLog(@"-------------"); }
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]
,您应该开始营业!答案 2 :(得分:38)
答案 3 :(得分:32)
要在iOS中使用字体,您必须根据字体 FULL NAME (PostScript名称)加载字体,这有时(通常是)不同于字体的实际文件名。
想象一下你自己重命名字体文件&#34; Arial-regular.ttf&#34;成为 &#34; foo.ttf&#34 ;.您刚刚重命名的字体文件中包含的字体仍然是 &#34; Arial字体正规&#34;
有一些很好的编程方法可以在这个线程上获取字体名称,但我使用命令行有不同的方法。
如果您使用的是Mac或Linux,只需从您拥有自定义字体的目录中的命令行运行此脚本(使用fontconfig实用程序已安装的fc-scan
实用程序,但如果没有,你可以通过自制软件安装它:brew install fontconfig
):
for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
以下是在我的~/Library/Fonts
目录上运行的上述命令的屏幕截图:
上面的脚本将运行当前目录中的所有.ttf
和.otf
文件,然后打印出可用于引用的每种字体的 PostScript名称 XCode或其他地方的字体文件。
如果您想了解一些其他信息(PostScriptName,Filename)和一些颜色编码,您可以运行此备用脚本:
for file in "$arg"*.{ttf,otf}; do
postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done
这比AppDelegate.m文件中的复制粘贴代码快一点,以便在每次要添加新字体文件时打印出名称,这是一种流行的方法,并且它也更快而不是打开FontBook中的字体来检查PostScript名称。
有用的提示:如果您在终端中使用上述脚本的别名,那么您只需键入一个命令即可获取当前目录中所有文件的所有PostScript字体名称(我的函数被称为fontnames
所以我所要做的就是在目录中的终端输入fontnames
,其中包含字体,PostScript名称将自动打印,这样你就可以节省开发时间工作流程,并在您需要时准备好使用这个方便的脚本。
希望这有帮助!
答案 4 :(得分:6)
你想知道如何得到这个名字: -
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily)
{
NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
NSArray *fontNames = [[NSArray alloc] initWithArray:
[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];
for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont)
{
NSLog(@" Font name: %@", [fontNames objectAtIndex:indFont]);
}
}
希望它可以帮助你...
答案 5 :(得分:5)
Swift 3.0
for familyName in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: familyName ) {
print("\(familyName) : \(fontName)")
}
}
答案 6 :(得分:4)
在您将字体添加到项目/应用程序后,添加此代码(可能只是在app delegate didFinishLaunchingWithOptions方法中),以便打印出应用程序的所有可用字体。从该列表开始,您应该能够识别您之后的字体。不要忘记删除不必要的代码。
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
答案 7 :(得分:3)
Swift 1.2:
for familyName in UIFont.familyNames() {
for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
println("\(familyName) : \(fontName)")
}
}
答案 8 :(得分:3)
如果要以编程方式查找给定字体文件的字体名称:
import Foundation
func loadFontName(for file: URL) throws -> String {
let data = try Data(contentsOf: file)
guard let provider = CGDataProvider(data: data as CFData) else {
throw Error("Could not create data provider")
}
guard let font = CGFont(provider) else {
throw Error("Could not load font")
}
guard let name = font.postScriptName else {
throw Error("Could not get font name from font file")
}
return name as String
}
根据需要替换您自己的throwable Error
对象。
答案 9 :(得分:3)
Swift 4.0 + 解决方案
for fontFamilyName in UIFont.familyNames {
print("family: \(fontFamilyName)\n")
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
print("font: \(fontName)")
}
}
将输出:
家庭:Apple SD Gothic Neo
字体:AppleSDGothicNeo-Thin
字体:AppleSDGothicNeo-Light
答案 10 :(得分:2)
您还可以使用otfinfo --info arial.ttf从命令行获取名称。 postscript名称是您需要传递给UIFont构造函数的名称。
答案 11 :(得分:1)
记录字体文件的familyNames,然后访问字体:
// You can log all font family names suing **fontNamesForFamilyName**
NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);
希望它对你有所帮助。
答案 12 :(得分:1)
另一个&#34;快速,实用&#34;黑客并不涉及扫描模拟器或设备上存在的所有默认字体,而是使用字体来处理故事板中的某些内容。然后,如果使用文本编辑器编辑故事板,则可以看到与&#34;内部&#34;一起使用的字体。如果您搜索&#34; customFonts&#34;标记:
<customFonts key="customFonts">
<array key="Linotype - AvenirNextLTPro-Bold.otf">
<string>AvenirNextLTPro-Bold</string>
</array>
<array key="Linotype - AvenirNextLTPro-Regular.otf">
<string>AvenirNextLTPro-Regular</string>
</array>
<array key="TradeGothicLTPro-BdCn20.otf">
<string>TradeGothicLTPro-BdCn20</string>
</array>
</customFonts>
答案 13 :(得分:0)
使用 Swift 4.1 列出 macOS 的字体名称和系列:
NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }
答案 14 :(得分:-1)
支持Swift 4.0
这只是一个打印所有字体系列的行代码,它的字体名称是
override func viewDidLoad() {
super.viewDidLoad()
//Main line of code
UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}