web-dev-qa-db-ja.com

Xcode 8カスタムフォントがインターフェイスビルダーに表示されない

IOSアプリケーションでカスタムフォント(Bebas Neue)を使用しようとしています。私が行った手順は次のとおりです。

  1. .otfファイルをプロジェクトにコピーします。
  2. .otfファイルがプロジェクトをターゲットとして設定していることを確認します。
  3. Plistの「アプリケーションが提供するフォント」に.otfファイルを追加しました。
  4. ビルドフェーズでは、.otfファイルは「バンドルリソースのコピー」にあります。
  5. Macにフォントをインストールします。
  6. 利用可能なすべてのフォントを印刷しようとしましたが、カスタムフォントが表示されません。

私が使用したコード:

for name in UIFont.familyNames() {
  println(name)
  if let nameString = name as? String
  {
    println(UIFont.fontNamesForFamilyName(nameString))
  }
}
  1. コードでフォントを設定しようとすると、うまくいきました。

私が使用したコード:

textLabel?.font = UIFont(name: "BebasNeueRegular", size: 14)
  1. しかし、インターフェイスビルダーでは設定できません。何か案が?

スクリーンショット:

FontFont-List

42
chengsam

以下の手順を試してください:Swift 3でテストされたコード。

ステップ1:カスタムフォントをプロジェクトに追加します((ターゲットに追加 -)チェックマークが付いています。「PermanentMarker.ttf」、「Pecita.otf」および「AROLY.ttf」フォントをテストフォントとして使用しています。

注:サポートフォントタイプttfおよびotf(両方のフォントタイプが機能するはずです)

ステップ2:application-info.plistファイルを変更します。キー「アプリケーションが提供するフォント」を新しい行に追加し、「PermanentMarker.ttf」を配列の新しいアイテムとして追加します。「アプリケーションが提供するフォント」 。

plistは次のようになります

enter image description here

これで、Interface Builderでフォントが利用可能になります。コードでカスタムフォントを使用するには、名前で参照する必要がありますが、多くの場合、名前はフォントのファイル名と同じではありません

これで、viewControllerからカスタムフォントにアクセスできます。以下のようにUIラベルをStoryboardに配置して、フォントをテストしています。

更新2:Working Solution

その後、カスタムフォントをインポートし、plist、goto Attributes Inspectorunder label> Text type>からstoryBoard。select Labelを更新しましたAttributedを選択し、リストからcustom fontを選択します。

enter image description here

enter image description here

enter image description here

出力:

enter image description here

アップデート1

それでもカスタムフォントがXcode font listにリストされない場合は、問題への関連リンクを確認してください

注:それでも、ラベルまたはボタンなどにプログラムでBebasNeueまたはcustom fontを割り当てることができます。 interface Builder。プログラムでオブジェクトにフォントを設定できない場合は、以下の方法を試してください。

フォントをUILabelに割り当てます。

    label?.font = UIFont(name: "BebasNeue", size: 35) // Set to any size

フォントをUIButtonに割り当てます。

    button.titleLabel?.font = UIFont(name: "BebasNeue", size: 35)

UITextFieldにフォントを割り当てます。

    textField.font = UIFont(name: "BebasNeue", size: 25) 

UINavigationBarにフォントを割り当てます。

    navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "BebasNeue", size: 25)!, NSForegroundColorAttributeName: UIColor.red]

UIToolBarにフォントを割り当てます。

    UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "BebasNeue", size: 25.0)!], for: UIControlState.normal)

出力:

enter image description here

59
Joe

同じフォント(Bebas Neue)を使用すると、まったく同じ問題が発生します。フォントはPlainコントロールのフォントリストに表示されません。

Joesの投稿のUpdate 2で説明されているように、Attributedコントロールに対して行いますが、実際には、通常のattributedTextの代わりにtextを変更します。動作。たとえば、実行時にテキストまたはテキストの色を変更するには、NSMutableAttributedStringをいじる必要があります。

この問題について調査を行いました。 FontLab Studio を使用してフォントを変更し、いくつかのテストを行いました。 dafont.comのBebas Neueバージョン1.400(2014年9月15日付け) を使用しました。

  • フォントファイルが壊れている可能性があります。 .otfおよび.ttfとして再保存:動作しませんでした。
  • フォントのメタデータが破損している可能性があります。すべてのグリフを新しいフォントにコピーし、Bebas Neueという名前を付けました:動作しませんでした。
  • フォントの名前をBebas NeueからBNに変更しました:それは動作します!しかし、なぜですか?
  • フォント名に「Neue」を使用できない場合があります(Helvetica NeueはiOS 8までのiOSシステムフォントだったため)。フォントの名前をTest Neueに変更:Still works。
  • フォント名に「Bebas」を使用できないかもしれませんか?フォントの名前をBebasに変更:Still works。
  • 何...確かに、フォント名をBebas Neueに戻しました:再び動作しません。
  • BebasNeueも試しました:また動作しませんでした。
  • 次に、名前をBebas Neue Whateverに変更しました:それは動作します。

    Bebas Neue Whatever

私はこれがなぜ起こっているのか本当に理解していません。 AppleまたはXcodeでは、Interface Builderで「Bebas Neue」または「BebasNeue」を使用したいですか?通常のBebas Neueをインストールしました。参照が破損した可能性がありますか?たぶん、Bebas NeueがXcodeで動作する場合、クリーンシステムの誰かが試すことができます。

とにかく、PlainスタイルのラベルとボタンにBebas Neue(最終バージョンを "Bebas Neue MyAppName"と名付けました)を使用できるので、目標を達成しました。属性付き文字列をいじる必要があります。

11
Flitskikker

その簡単でシンプルな今-Xcode 10およびSwift 5でテスト済み

Xcodeにフォントを追加する手順

UILabel、UITextField、またはフォントセクションの下にあるものを選択して、

ステップ1

フォント選択画面の左隅から設定メニューを選択します。そして、フォントマネージャオプションを選択します。

enter image description here

ステップ2

以下のマークのある追加ボタンをクリックします。

enter image description here

ステップ3

フォントを含むフォルダーを選択します。 XCodeフォントリストに読み込まれます。

プロジェクトにフォントを追加する手順

キーFonts provided by applicationを使用してplistに説明を追加し、プロジェクトターゲット設定でコピーバンドルリソース内にフォントファイルを配置することを忘れないでください。

はい!それは..njoy ..

7
Saranjith

最後に、Bebas Neueフォントの問題の根本原因を見つけました。

どこでフォントをダウンロードしたか覚えていませんが、Bebas Neue fontsinconsistentです。

ダウンロードつまりTypelightというアプリ

通常ではないを開くが、つまり太字Typelightのフォント。

enter image description here

Bebas Neueフォントのほとんどを修正する必要があります。

5
János

フォルダー名とフォント名には違いがあるかもしれません。ソリューションは次のようになります。

  • すべてのデフォルトのフォント名を印刷します(カスタムフォントなし)
  • プロジェクトにカスタムフォントを追加します。
  • すべてのフォント名を印刷します。

その後、フォント名を比較します。

func printFontsNames() {
    let fontFamilyNames = UIFont.familyNames
    for familyName in fontFamilyNames {
        print("------------------------------")
        print("Font Family Name = [\(familyName)]")
        let names = UIFont.fontNames(forFamilyName: familyName )
        print("Font Names = [\(names)]")
    }
}
2

実際には、属性付きフォントに移動して、カスタムフォントウィンドウをクリックするだけです。そこで左上の歯車をクリックし、フォントの管理オプションをクリックします。ウィンドウがポップアップして上部に表示され、フォントを追加できるようにプラス記号が表示されます。 xyz.tffのようにダウンロードしたカスタムフォントを選択するだけで、追加する必要があります。

重要なのは、ttfファイルはプロジェクトディレクトリと同様にp-listでも参照する必要があるということです!

2
Andrew Van Beek

Xcode 3.x以降の 古いバグ でした:

非標準フォントとInterface Builderを使用したXCode 3.xのIBにはバグ/既知の問題があります。通常、カスタムフォントはプログラムで設定する必要があります([UIFont fontWithName:]を使用)

this with User Defined Runtime Attributecategoriesのような回避策があります。

0
wj2061

これは、それを引き起こすような変更を加えなくても、Swift 4.2の場合、私にとっては繰り返し発生する問題です。

Xcodeプロジェクトからフォントファイルを削除して再度追加すると、問題が修正されます(次回まで)。

0
alstr

同様の問題がありました

カスタムフォントを追加し、UILabelにも割り当てます。すべて正常に動作しますが、数回後、期待どおりに動作しません。

すべてのソリューションを試してみましたが、何もうまくいきません。だからここに私の解決策があり、前のUILabel(既に新しく追加されたカスタムフォントがあります)に移動しますselect-> label-> select新しく追加されたフォント。他のUIコントロールのフォントを確認してください。

今では正常に動作しています。

これがnewDevsに役立つことを願っています...

0
Vishal16