我目前正在开发一款使用“ChalkboardSE-Regular”字体的应用,我的部署目标是4.0+。此字体在4.1中不可用,但在4.3中受支持。检查字体是否存在的最佳方法是什么,如果不存在,请在< 4.1版本的iOS上使用其他支持的字体。 [UIFont familyName]返回这些字体的列表“Chalkboard SE”
提前致谢!
Ť
答案 0 :(得分:109)
[UIFont familyName]
支持iPhone OS 2.0(2.0之前,iPhone或iPod touch上不允许使用第三方应用),所以我会用它来检查当前是否存在字体系列设备,如果它不存在,请为该版本的iOS使用合适的后备字体。这是John Gruber 2007年原版iPhone中的iPhone字体列表(与当天的Mac OS X中的字体形成对比)。我没有检查过它们,但我检查的iOS字体仍然在iOS 5中:
以下是使用[UIFont familyName]
:
NSLog (@"Font families: %@", [UIFont familyNames]);
这将生成如下列表:
字体系列:( 吞武里, “Snell Roundhand”, “Academy Engraved LET”,等等。
一旦知道了姓氏,就可以使用UIFont
类方法fontNamesForFamilyName
来获取NSArray中所有字体的名称。例如:
NSLog (@"Courier New family fonts: %@", [UIFont fontNamesForFamilyName:@"Courier New"]);
这将生成如下列表:
Courier New系列字体:( CourierNewPSMT, “CourierNewPS-BoldMT” “CourierNewPS-BoldItalicMT” “CourierNewPS-ItalicMT” )
以下示例代码打印当前设备上每个系列中每种字体的列表:
NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
NSString *fontFamily = [fontFamilies objectAtIndex:i];
NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
NSLog (@"%@: %@", fontFamily, fontNames);
}
有关更多信息,请查看iOS开发人员参考文档,了解UIFont
类方法familyNames和fontNamesForFamilyName:。
答案 1 :(得分:38)
如果您使用Swift,您可以打印所有字体(见下文)。您还可以检查字体是否存在。
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
答案 2 :(得分:14)
此字体在4.1中不可用,但在4.3中受支持。检查字体是否存在的最佳方法是什么
只需使用UIFont* f = [UIFont fontWithName:... size:...];
以通常的方式询问字体。如果字体不可用,则结果(f
)将为零。
(保证字体可用性的一种方法是将其包含在应用包中......)
答案 3 :(得分:5)
忘记那些for循环,这是查看iOS支持的字体的最简单方法。
只需在操场上运行以下任何一项。
输入
dump(UIFont.familyNames)
输出
▿ 75 elements
- "Copperplate"
- "Heiti SC"
- "Kohinoor Telugu"
...
输入
dump(UIFont.familyNames.flatMap { UIFont.fontNames(forFamilyName: $0) })
输出
▿ 248 elements
- "Copperplate-Light"
- "Copperplate"
- "Copperplate-Bold"
...
输入
dump(UIFont.fontNames(forFamilyName: "Helvetica Neue"))
输出
▿ 14 elements
- "HelveticaNeue-Italic"
- "HelveticaNeue-Bold"
- "HelveticaNeue-UltraLight"
- "HelveticaNeue-CondensedBlack"
...
答案 4 :(得分:2)
这就是我在目标c上所做的,以确定字体是否可用
NSFont *font = [NSFont fontWithName:@"thefont" size:25.0];
if (font==nil) {
// thefont is available
} else {
// thefont is not available
}
答案 5 :(得分:2)
对于iOS9 / Swift 2.0,上面的任何一个都不会起作用,因为语法稍有改动。我个人也更喜欢使用扩展(我选择为UIFont创建一个,因为它符合最佳和修改的@API答案,因为这是最好的答案):
extension UIFont {
static func availableFonts() {
// Get all fonts families
for family in UIFont.familyNames() {
NSLog("\(family)")
// Show all fonts for any given family
for name in UIFont.fontNamesForFamilyName(family) {
NSLog(" \(name)")
}
}
}
}
现在你可以打电话:
UIFont.availableFonts()
它会告诉你
形式的所有字体: Bangla Sangam MN
: BanglaSangamMN-Bold
: BanglaSangamMN
: Zapfino
: Zapfino
希望它有所帮助!
答案 6 :(得分:2)
Swift版本:
UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print(" \($0)") }) })
答案 7 :(得分:1)
尝试使用该字体名称进行初始化,如果它nil
执行其他操作。 Swift代码:
if let font = UIFont(name: name, size: size) { // ok } else { // not ok }
答案 8 :(得分:0)
这是Steves对Swift代码的回答(用于快速复制和粘贴目的):
var fontFamilies = UIFont.familyNames()
for (var i:Int = 0; i < fontFamilies.count; i++) {
var fontFamily: NSString = fontFamilies[i] as NSString
var fontNames: NSArray = UIFont.fontNamesForFamilyName(fontFamilies[i] as String) as NSArray
NSLog ("%@: %@", fontFamily, fontNames)
}
答案 9 :(得分:0)
对于objective-c
for (NSString *family in UIFont.familyNames) {
NSLog(@"family %@",family);
for (NSString *name in [UIFont fontNamesForFamilyName:family]) {
NSLog(@" name = %@",name);
}
}
答案 10 :(得分:0)
好吧,您无需打开任何代码即可直接打开http://iosfonts.com并根据您的iOS版本支持检查可用性。您还可以知道它的外观。
答案 11 :(得分:0)
Swift 4.x
UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print(" \($0)") }) })
答案 12 :(得分:0)
print(“字体家族:%@”,UIFont.familyNames)