web-dev-qa-db-ja.com

UIFont fontWithNameはnilを返します

私のinfo.plistに、「アプリケーションによって提供されるフォント」というキーを追加し、EdwardianScriptITCStd.otfを追加しました enter image description here

しかし、そのフォントを取得しようとすると、nilが返されます。

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
                                size:16.0f]);

[UIFont familyNames]を使用してフォントファミリーを印刷しましたが、そこにもありません。

(
    Thonburi,
    "Snell Roundhand",
    "Academy Engraved LET",
    "Marker Felt",
    "Geeza Pro",
    "Arial Rounded MT Bold",
    "Trebuchet MS",
    Arial,
    Marion,
    "Gurmukhi MN",
    "Malayalam Sangam MN",
    "Bradley Hand",
    "Kannada Sangam MN",
    "Bodoni 72 Oldstyle",
    Cochin,
    "Sinhala Sangam MN",
    "Hiragino Kaku Gothic ProN",
    Papyrus,
    Verdana,
    "Zapf Dingbats",
    Courier,
    "Hoefler Text",
    "Euphemia UCAS",
    Helvetica,
    "Hiragino Mincho ProN",
    "Bodoni Ornaments",
    "Apple Color Emoji",
    Optima,
    "Gujarati Sangam MN",
    "Devanagari Sangam MN",
    "Times New Roman",
    Kailasa,
    "Telugu Sangam MN",
    "Heiti SC",
    "Apple SD Gothic Neo",
    Futura,
    "Bodoni 72",
    Baskerville,
    "Chalkboard SE",
    "Heiti TC",
    Copperplate,
    "Party LET",
    "American Typewriter",
    "Bangla Sangam MN",
    Noteworthy,
    Zapfino,
    "Tamil Sangam MN",
    "DB LCD Temp",
    "Arial Hebrew",
    Chalkduster,
    Georgia,
    "Helvetica Neue",
    "Gill Sans",
    Palatino,
    "Courier New",
    "Oriya Sangam MN",
    Didot,
    "Bodoni 72 Smallcaps"
)

何が欠けていますか?ありがとう!

29
0xSina

コメントが長くなり始めていたので、代わりに回答を送信することにしました:)

  1. カスタムフォントはiOS 3.2以降でのみサポートされているため、Deployment Targetビルド設定がバージョン3.2よりも前に戻らないようにしてください。

  2. フォントがビルドターゲットに含まれていることを確認します(「バンドルリソースのコピー」ビルドフェーズで)

  3. 「アプリケーションによって提供されるフォント」のキーの未加工の値をチェックして、それが正しいことを確認してください。 Xcodeで* .plistを表示したら、右クリックして[未加工のキー/値を表示]を選択し、キーがUIAppFontsであることを確認します。

  4. IOSではfontWithName: size:を使用する場合、フォントにPostScript名が必要であると思います。これは、AppleのFont Bookでフォントを開き、command+Iと入力することで検索/確認できます。

  5. ある時点で、カスタムフォントとUILabelの使用に問題がありました。この問題がまだ存在するかどうかはわかりません。解決策は、UILabelをサブクラス化し、その中にフォントを設定することでした。

それでも機能しない場合は、 このカスタムフォントのスタックオーバーフロースレッド にかなりの情報があります。

[〜#〜]編集[〜#〜]
私があなたと同じフォントファイルを持っている保証はありませんが、私のマシンではPostScript名は「EdwardianScriptITC」です

78
inspector-g

フォント名に「-」文字が含まれている場合は、スペース文字に置き換えます。たとえば、Arial-Bold.ttfは[UIFont fontWithName: "Arial Bold" size:10]のように使用されます。

4
BeyazBaron

私は同じ問題を抱えていました。ストーリーボードでインターフェイスビルダーからラベルにフォントを設定できます。次に、そのフォントをラベルからデバッグモードで取得します:

let cfnt = txtUsernameField.font

次に、小さなデバッグウィンドウの[i]ボタンをクリックすると、フォントのファミリ名がコンソールウィンドウに書き込まれます。そしてあなたはそれをそのように使うことができます:

txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 
1
user3812138

以前は問題なく動作するカスタムフォントを持っていると誓ったのですが、この問題がありました。

参照を再確立できるように、XCodeプロジェクトのプロジェクトで "クリーン"を実行する必要があることがわかりました。

0
rmigneco

使用するフォント名はFont Bookの「ファミリ名」のようです。 PostScript名を試しましたが、常に機能するとは限りません。姓は、私の知る限り、これまで常に機能してきました。

上記の回答で述べたように、この情報を確認するには、Font Book内でフォントを選択し、cmd + Iを押します。

お役に立てれば...

0
Sagi Mann

私が遭遇した問題は、フォントファミリの一部のフォントが正しく返された一方で、他のフォントはnilを返したということです。

例:

  • MuseoSansRounded-500有効
  • MuseoSansRounded-900 nil

Xcodeには、Interface Builderで使用されていたカスタムフォントが自動的に含まれることがわかりました。 IBでは500ウェイトのフォントを使用しましたが、900ウェイトのフォントは使用しませんでした。

これらの2つのステップで解決しました:

  1. ビルド設定で、Auto-Activate Custom Fontsを見つけて無効にします。私のプロジェクトには、この2つのインスタンスがありました。

  2. アプリの起動時に、手動でカスタムフォントをシステムに登録します。私はこれからのスニペットを使用しましたSO答え: https://stackoverflow.com/a/32600784/131378

完全性の名の下で、私はAuto-Activate Custom Fontsをオンのままにして、それらのフォントをコードに登録することをスキップすることができました。しかし、以前手動で登録されていたIBの新しいフォントを使用してしまった場合、開発中にコードを更新したくありませんでした。すでに自動アクティブ化されているフォントを登録すると、Xcodeは文句を言います。

0
Mark Suman