web-dev-qa-db-ja.com

iOSのカスタムフォントが機能しない

IOSアプリケーションでHelveticaNeue-UltraLightを使用したい。フォントファイルをリソースとしてプロジェクトに追加し、plistファイルに「アプリケーションが提供するフォント」キーを追加しています。ファイル名はHelveticaNeue.dfontで、キー配列に追加しました。

利用可能なフォントを確認すると、すぐに表示されます...

  NSArray *fonts = [UIFont fontNamesForFamilyName:@"Helvetica Neue"];

for(NSString *string in fonts){
    NSLog(@"%@", string);
}

1-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-Bold
2011-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-CondensedBlack
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue-Medium
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-Light
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-CondensedBold
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-LightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLight // HERE IT IS!
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-BoldItalic
2011-07-08 17:32:57.870 myApp[5159:207] HelveticaNeue-Italic

しかし、[UIFont fontWithName:@ "HelveticaNeue-UltraLight" size:12]で取得しようとすると、ちょうどHelveticaNeue-Light ..

エラーや警告が表示されません。助けてください!

42
the Reverend

ファイルをプロジェクトに追加するだけでなく、ターゲットにも追加する必要があります。

時々(私の場合のように)、Xcodeで「.ttf」ファイルをドラッグアンドドロップすると、「ターゲットに追加」がチェックされません。つまり、ファイルはプロジェクトで実際に表示されますが、アプリには埋め込まれません。

確認するには:

  • プロジェクトの名前をクリックします(左ペイン)
  • 次に、ターゲット(中央ペイン)で
  • 次に、「ビルドフェーズ」(右ペインの3番目のタブ)
  • 次に、「バンドルリソースのコピー」

そのリストにフォントファイルが表示されます。

100
Ben G

私が抱えていたのと同じ問題を抱えていると思います。iOSには、同じファミリーの2つ以上のフォントを使用できないというバグがあります。

詳細と解決策については、こちらのブログ投稿を参照してください: http://www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font -family /

バンドルにフォントファイルを追加した後 "アプリケーションが提供するフォント"プロパティドロップダウン矢印をクリックし、拡張子付きのフォント名を入力します

9
Baljeet Singh

Font Bookアプリケーションを開きます。自分でフォントをインストールした場合は、ユーザーにアクセスして、目的のフォントを探し、xcodeプロジェクトでそのフォントのPostScript名を使用します。

同じファミリーの異なるフォントバリエーションでも動作するはずです。

8
andresousa

同じフォントの異なるバリエーションで動作しています(IOS 8)でも。誰かが同じ問題を抱えている場合に備えて、間違いを投稿します...私は代わりにフォントのファイル名を使用していましたフォント名。有用な解決策は、利用可能なすべてのフォントを印刷し、使用していたフォントを探します。Swiftは

for fontFamilyNames in UIFont.familyNames {
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyNames) {
        print("FONTNAME:\(fontName)")
    }
}

この便利なチュートリアルは、次の場所にあります: Code with Chris

8
TomCobo

これはおそらくOPには役立たないでしょうが、他の人には役立つかもしれません。

IOS 5では、Helvetica Neueは自動的に含まれます。このカスタムフォントをバンドルに追加する必要はありません。そのフォントファミリをInterface Builderから直接使用することもでき、非常に便利です。

3
sho

これを試してみてください。これはあなたにとっても喜ばしいことです。

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
2
vishiphone

私はサードパーティからフォントHelvetica Neue UltraLightを購入し、問題なく追加しました。

1
the Reverend

スペースで試してください:

[UIFont fontWithName:@"Helvetica Neue UltraLight" size:12];

特定のフォントが表示されない? を参照してください

1
Jano

何時間もかけて、追加する必要のあるフォントの名前がフォントのファイル名ではなく、実際のフォント名であることを知りました。フォントファイルbonveno.ttfをインクルードしようとしていました。 info.plistにファイル名と拡張子を含めて、バンドルリソースのコピーリストでフォントを確認できました。私のコードは

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

それが問題を引き起こしていました。次に、Finderのフォントファイルをダブルクリックして、フォントのプレビューを表示しました。そのとき、プレビューウィンドウでBonvenoCFのフォント名に気付きました。だから私はそのような名前をコードに追加しました

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

チャームのように働いた!!私のアプリでこのかわいいフォントなしでは生きていけません。

1
Sayka

よく説明されている @ Ben answer に加えて、まだフォントを取得できない場合は、LabelのいずれかのStoryboardにフォントを使用または割り当てるだけで、 このコード を使用して取得を開始します

それでも[UIFont fontWithName:@"Font-Regular" size:11];を使用してフォントを取得できない場合は、命名に問題があるはずです。デバッガーのブレークポイントで停止し、異なる名前を使用してデバッグし、どのponilではないオブジェクトを出力するかを確認します

po [UIFont fontWithName:@ "FontRegular" size:11];

または

po [UIFont fontWithName:@ "Font Regular" size:11];

または

po [UIFont fontWithName:@ "Font-Regular" size:11];

実際のフォント名に対して<UICTFont: 0x7fe2044021d0> font-family: "Interstate-Regular"; font-weight: normal; font-style: normal; font-size: 11.00ptを取得します。そうでない場合はnilを取得します

0
Baig

IOSでカスタムフォントを使用するには、プロジェクトにドラッグアンドドロップしてフォントを追加するだけです。 Info.plistの拡張子が「アプリケーションが提供するフォント」のキーを持つフォント名の配列に言及します。次に、以下のコードを使用してすべてのフォントファミリ名を印刷します。

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

コンソール印刷:

Arialヘブライ語 ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri Calibri-Bold Calibri

ジョージアジョージア-太字イタリックジョージア-太字ジョージア-イタリックジョージア

次に、コンソールから、実際のフォント名を取得します(上記のとおり)。以下のコードを使用してフォントを作成します-

コアテキスト:

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL);

UIKitの場合:

UIFont *font = [UIFont fontWithName:fontName size:10];

注:ここで、fontName = @ "Calibri-Bold"は拡張子なしです。

0
Mahesh

確認するもう1つのことは、Mac上です。アプリのFont Bookを開きます。次に、ファイル->ファイルの検証に進み、フォントを開きます。そこに何かが(警告があっても)失敗している場合、iOSは通常、エラーなしでアプリにフォントをロードすることを拒否します。

この場合、「Typelight」という無料アプリでフォントを開き、「名前を付けて保存」というフォントを保存し直すことでエラーを修正できます。

0

に加えて:

  • 「アプリケーションが提供するフォント」の下のinfo.plistにフォントファイル名を追加する
  • 実際のファイルをプロジェクトに追加します。

また、ターゲット->ビルドフェーズ->バンドルリソースのコピーに、カスタムフォントの実際のファイル名があることを確認する必要があります。

それらが表示されているかどうかを確認するには、次のようなことができます。

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
0
azwethinkweiz