我在之前的应用程序中使用了自定义字体.
文件名是"ProximaNova-Regular.otf"并加载我刚使用的字体...
[UIFont fontWithName:@"ProximaNova-Regular" size:20];
Run Code Online (Sandbox Code Playgroud)
这非常有效.
现在在这个新的应用程序中我有三个字体文件...
Dude_Willie.otf
Impact
handsean.ttf
Run Code Online (Sandbox Code Playgroud)
但我不知道如何加载这些.
我试过了
[UIFont fontWithName:<the file name> size:20];
Run Code Online (Sandbox Code Playgroud)
但这只是回到使用Helvetica.
如何找到要使用的名称?
Seg*_*gev 117
右键单击TTF - >获取信息
"全名"是您正在寻找的.
这对TTF来说对我有用.
编辑:
我刚才使用的字体与Get Info中的"Full Name"名称不同.
要编译此答案,如果上面的快速检查不起作用,请在项目中运行此代码:
for (NSString *fontFamilyName in [UIFont familyNames]) {
for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
NSLog(@"Family: %@ Font: %@", fontFamilyName, fontName);
}
}
Run Code Online (Sandbox Code Playgroud)
并搜索要使用的字体的正确名称.
Swift 3.0代码:
for fontFamilyName in UIFont.familyNames{
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
print("Family: \(fontFamilyName) Font: \(fontName)")
}
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*cko 66
按照以下四个简单步骤在iOS应用中添加和使用新字体:
UIAppFonts数组中(此文本的纯文本为"应用程序提供的字体")Run Code Online (Sandbox Code Playgroud)for family: String in UIFont.familyNames { print("\(family)") for names: String in UIFont.fontNames(forFamilyName: family) { print("== \(names)") } }
UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]并且您应该开展业务!小智 46
rad*_*ual 32
要在iOS中使用字体,您必须根据字体的全名(PostScript名称)加载字体,该字体有时(通常是)与字体的实际文件名不同.
想象一下,自己将字体文件"Arial-regular.ttf"重命名为"foo.ttf".刚刚重命名的字体文件中包含的字体仍然是"Arial-regular".
有一些很好的编程方法可以在这个线程上获取字体名称,但是我使用命令行有不同的方法.
如果您使用的是Mac或Linux,只需从您拥有自定义字体的目录中的命令行运行此脚本(使用已安装的fontconfig中的fc-scan实用程序,但如果不是,则可以通过homebrew安装它:):brew install fontconfig
for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done
Run Code Online (Sandbox Code Playgroud)
以下是在我的~/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
Run Code Online (Sandbox Code Playgroud)
这比AppDelegate.m文件中的复制粘贴代码快一点,以便在每次要添加新字体文件时打印出名称,这是一种流行的方法,并且它比在FontBook中打开字体要快得多检查PostScript名称.
有用的提示:如果您在终端中使用上述脚本的别名,那么您只需输入一个命令即可获取当前目录中所有文件的所有PostScript字体名称(我的函数被调用,fontnames所以我只需要做是fontnames在目录中的终端类型,其中包含字体,PostScript名称将自动打印,然后您将节省开发工作流程的时间,并在您需要时准备好使用这个方便的脚本.
希望这可以帮助!
你想知道如何得到这个名字: -
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]);
}
}
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助你......
小智 5
Swift 3.0
for familyName in UIFont.familyNames {
for fontName in UIFont.fontNames(forFamilyName: familyName ) {
print("\(familyName) : \(fontName)")
}
}
Run Code Online (Sandbox Code Playgroud)
如果要以编程方式查找给定字体文件的字体名称:
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
}
Run Code Online (Sandbox Code Playgroud)
Error根据需要替换为自己的可抛对象。
Swift 4.0+解决方案
for fontFamilyName in UIFont.familyNames {
print("family: \(fontFamilyName)\n")
for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
print("font: \(fontName)")
}
}
Run Code Online (Sandbox Code Playgroud)
将输出:
家庭:Apple SD Gothic Neo
字体:AppleSDGothicNeo-Thin
字体:AppleSDGothicNeo-Light
| 归档时间: |
|
| 查看次数: |
61398 次 |
| 最近记录: |