如何检查iOS版本中是否有字体?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查iOS版本中是否有字体?相关的知识,希望对你有一定的参考价值。

我目前正在开发一个使用“ChalkboardSE-Regular”字体的应用程序,我的部署目标是4.0+。此字体在4.1中不可用,但在4.3中受支持。检查字体是否存在的最佳方法是什么,如果不存在,请在<4.1版本的ios上使用其他支持的字体。 [UIFont familyName]返回这些字体的列表“Chalkboard SE”

提前致谢!

Ť

答案

[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]);

这将生成如下列表:

字体系列:( Thonburi,“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类方法familyNamesfontNamesForFamilyName:

另一答案

Swift 4.x

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("($0)"); UIFont.fontNamesForFamilyName("($0)").sort( { $0 < $1 } ).forEach({ print("     ($0)") }) })
另一答案

对于objective-c

for (NSString *family in UIFont.familyNames) {
    NSLog(@"family %@",family);
    for (NSString *name in [UIFont fontNamesForFamilyName:family]) {
        NSLog(@"      name = %@",name);
    }
}
另一答案

好吧,您可以打开http://iosfonts.com并根据您的iOS版本支持检查可用性,而不是编写一行代码。你也可以知道它会是什么样子。

http://iosfonts.com Preview Feature

另一答案

如果您使用Swift,您可以打印所有字体(见下文)。您还可以检查字体是否存在。

for family in UIFont.familyNames {
    print("(family)")

    for name in UIFont.fontNames(forFamilyName: family) {
        print("   (name)")
    }
}
另一答案

此字体在4.1中不可用,但在4.3中受支持。检查字体是否存在的最佳方法是什么

只需使用UIFont* f = [UIFont fontWithName:... size:...];以通常的方式询问字体。如果字体不可用,则结果(f)将为零。

(保证字体可用性的一种方法是将其包含在应用程序包中...)

另一答案

Swift 3.x

忘记那些for循环,这是查看iOS支持的字体的最简单方法。

只需在操场上运行以下任何一项即可。


仅限姓氏

输入

dump(UIFont.familyNames)

产量

▿ 75 elements
  - "Copperplate"
  - "Heiti SC"
  - "Kohinoor Telugu"
  ...

Font Names Only

输入

dump(UIFont.familyNames.flatMap { UIFont.fontNames(forFamilyName: $0) })    

产量

▿ 248 elements
  - "Copperplate-Light"
  - "Copperplate"
  - "Copperplate-Bold"
  ...

Font Names for Specified Family Name

输入

dump(UIFont.fontNames(forFamilyName: "Helvetica Neue"))

产量

▿ 14 elements
  - "HelveticaNeue-Italic"
  - "HelveticaNeue-Bold"
  - "HelveticaNeue-UltraLight"
  - "HelveticaNeue-CondensedBlack"
  ...
另一答案

这就是我在目标c上所做的,以确定字体是否可用

NSFont *font = [NSFont fontWithName:@"thefont" size:25.0];
if (font==nil) {
    // thefont is available
} else {
    // thefont is not available
}
另一答案

对于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

希望能帮助到你!

另一答案

Swift版本:

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("($0)"); UIFont.fontNamesForFamilyName("($0)").sort( { $0 < $1 } ).forEach({ print("     ($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)
    }
另一答案

尝试使用该字体名称初始化,如果它是nil做其他事情。 SWIFT代码:

if let font = UIFont(name: name, size: size) { // ok } else { // not ok }

以上是关于如何检查iOS版本中是否有字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 iOS 是不是有可用更新?

如何检查刚体是否在移动?

如何检查iOS版本是不是支持库?

应用程序提供的字体列表(iOS)

检查是不是已设置 JSP 片段

如何修复“代码应明确检查权限是不是可用”错误