web-dev-qa-db-ja.com

iOSのバージョンでフォントが使用可能かどうかを確認するにはどうすればよいですか?

現在、「ChalkboardSE-Regular」フォントを使用するアプリで作業しており、展開ターゲットは4.0以降です。このフォントは4.1では使用できませんでしたが、4.3ではサポートされています。フォントが存在するかどうかを確認し、存在しない場合は、<4.1バージョンのiOSでサポートされている別のフォントを使用することをお勧めします。 [UIFont familyName]は、これらのフォント「Chalkboard SE」のリストを返します

前もって感謝します!

T

51
tg2007

[UIFont familyName]はiPhone OS 2.0にサポートされます(2.0以前は、サードパーティのアプリはiPhoneまたはiPod touchで許可されていませんでした)。これを使用して、現在のデバイスにフォントファミリが存在するかどうかを確認し、存在しない場合は、そのバージョンのiOSに適した代替フォントを使用します。以下は、2007年のオリジナルのiPhoneのJohn GruberのiPhoneフォントのリストです(当時のMac OS Xのフォントとは対照的です)。すべてをチェックしたわけではありませんが、チェックしたiOSフォントはまだiOS 5にあります。

[UIFont familyName]の使用例を次に示します。

NSLog (@"Font families: %@", [UIFont familyNames]);

これにより、次のようなリストが生成されます。

フォントファミリ:(トンブリ、「スネルラウンドハンド」、「アカデミーエングレーデッド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);
}

詳細については、UIFontクラスメソッド familyNames および fontNamesForFamilyName: のiOSデベロッパーリファレンスドキュメントをご覧ください。

110
Steve HHH

Swift=を使用すると、すべてのフォントを印刷できます(以下を参照)。フォントが存在するかどうかも確認できます。

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

    for name in UIFont.fontNames(forFamilyName: family) {
        print("   \(name)")
    }
}
40

このフォントは4.1では使用できませんでしたが、4.3ではサポートされています。フォントが存在するかどうかを確認する最善の方法は何ですか

UIFont* f = [UIFont fontWithName:... size:...];を使用して、通常の方法でフォントを要求するだけです。フォントが利用できない場合、結果(f)はnilになります。

(フォントの可用性を保証する1つの方法は、アプリバンドルに含めることです...)

14
matt

Swift 3.x

これらの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"
  ...
6
Beau Nouvelle

Swiftバージョン:

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print("     \($0)") }) })
2
eMdOS

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

それが役に立てば幸い!

2
Jiri Trecak

これは、フォントが使用可能かどうかを調べるためにObjective Cで行ったことです。

NSFont *font = [NSFont fontWithName:@"thefont" size:25.0];
if (font==nil) {
    // thefont is available
} else {
    // thefont is not available
}
2
disaster code

Swift 4.x

UIFont.familyNames().sort( { $0 < $1 } ).forEach({ print("\($0)"); UIFont.fontNamesForFamilyName("\($0)").sort( { $0 < $1 } ).forEach({ print("     \($0)") }) })
1
Mercurial

そのフォント名で初期化してみて、nilの場合は別のことをしてください。 Swift code:

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

1
superarts.org

スティーブスの回答を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)
    }
1
Pontus

さて、1行のコードを記述するのではなく、 http://iosfonts.com を開いて、iOSバージョンのサポートに基づいて可用性を確認するだけです。また、どのように見えるかを知ることもできます。

http://iosfonts.com Preview Feature

0
Sauvik Dolui

objective-cの場合

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