67

iOSプロジェクトにフォントを追加しました。これはプロジェクト内にあり、プロジェクトのビルド時にコピーされます。有効なフォントのようで、アプリからデバイス上のすべてのフォントを一覧表示すると表示されます。フォントを含めるようにplistを適切に設定しました。Xcode 4.2のストーリーボードセクションのテキストコントロールやボタンなどで使用するために、検索結果を表示できないようです。さらに、フォント名を入力できないように見えます。フォントダイアログを使用する必要があります。このフォントをシステムにもインストールしようとしましたが、このリストに表示されないようです。これはコードでのみ行う必要がありますか、それともストーリーボードインターフェイスを介して行うことができますか?

これをコードで機能させることはできますが、ストーリーボードを介してこれを行う方がはるかに便利であることに注意してください。

4

7 に答える 7

147

UPDATE: Xcode 6 Interface Builder now allows you to select custom fonts and will render them at design time correctly.

I know this question is quite old, but I've been struggling to find an easy way to specify a custom font in Storyboard (or Interface Builder) easily for iOS 5 and I found a quite convenient solution.

First, make sure that you've added the font to the project by following this tutorial. Also remember that UINavigationBar, UITabBar and UISegmentedControl custom font can be specified by using the setTitleTextAttributes: method of the UIAppearance proxy.

Add the categories below to the project for UIButton, UITextField, UILabel and any other component that needs a custom font. The categories simply implement a new property fontName which changes the current font of the element while maintaining the font size.

To specify the font in Storyboard, just select the desired element (label, button, textview, etc) and add a User Defined Runtime Attribute with Key Path set to fontName of type String and value with the name of your custom font.

Custom font Storyboard

And that's it, you don't even need to import the categories. This way you don't need an outlet for every UI component that requires a custom font and you don't need to code it manually.

Take into account that the font won't show in Storyboard, but you will see it when running on your device or simulator.


Category files

UIButton+TCCustomFont.h:

#import <UIKit/UIKit.h>

@interface UIButton (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UIButton+TCCustomFont.m:

#import "UIButton+TCCustomFont.h"

@implementation UIButton (TCCustomFont)

- (NSString *)fontName {
    return self.titleLabel.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}

@end

UILabel+TCCustomFont.h:

#import <UIKit/UIKit.h>

@interface UILabel (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UILabel+TCCustomFont.m:

#import "UILabel+TCCustomFont.h"

@implementation UILabel (TCCustomFont)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end

UITextField+TCCustomFont.h:

#import <UIKit/UIKit.h>

@interface UITextField (TCCustomFont)
@property (nonatomic, copy) NSString* fontName;
@end

UITextField+TCCustomFont.m:

#import "UITextField+TCCustomFont.h"

@implementation UITextField (TCCustomFont)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end

Also downloadable from GIST and also as a single file.

Troubleshooting

If you run against runtime errors because the fontName property is not specified just add the flag -all_load under Other linker Flags in project settings to force the linker to include the categories.

于 2013-03-01T10:06:28.833 に答える
60

Xcode6.0から、Xcode6.0リリースノートとして:

Interface Builderは、デザイン時に埋め込まれたカスタムiOSフォントをレンダリングし、完成したアプリがどのように見えるかを正しいサイズでより正確にプレビューします。

ストーリーボードでラベルフォントを設定できます。次のように行うことができます

  1. カスタムフォントファイルを入手する(.ttf、 .ttc)

  2. フォントファイルをXcodeプロジェクトにインポートします

    ここに画像の説明を入力してください

  3. app-info.plistで、アプリケーションによって提供されるFontsという名前のキーを追加します。これは配列タイプであり、すべてのフォントファイル名を配列に追加します。注:ファイル拡張子を含みます。

ここに画像の説明を入力してください

  1. ストーリーボードで、 UILabelをインターフェイスにドラッグし、ラベルを選択して、属性インスペクターに移動し、フォント選択領域の右アイコンボタンをクリックします。ポップアップパネルで、 [フォント]を選択し、[埋め込みのファミリ]を選択します。フォント名。

ここに画像の説明を入力してください

参照

于 2014-12-01T12:15:06.010 に答える
5

これはXCodeのバグであり、3.x以降に存在し、まだ修正されていません。私も同じ問題に直面しましたが、運が悪かったのでシステムに追加しようとしました。これは、InterfaceBuilderに表示されないフォントに関する別のSO投稿です。

于 2012-02-01T04:41:19.650 に答える
3

モンジャーの答えは正しいものです。私のように、コンパイル後に追加されたフォントが表示されない場合は、必ずフォントをビルドフェーズに追加してください(ターゲット->ビルドフェーズ->バンドルリソースのコピー->フォントファイルの追加)

于 2015-06-24T13:51:58.517 に答える
1

XCode 9.4の時点では、XCodeはストーリーボード内のフォントを直接尊重していません。それらは設計時に表示されますが、実行時には表示されません。fontWithName APIを使用している場合は、nilが返されることがわかりますが、storyboard / xibで使用すると、なぜ表示されないのかを知る方法はありません。

  • 実行時にStoryboard/XIBからすぐに機能することを確認する唯一の方法は、Copy Bundle Resourcesビルドフェーズに.ttc/.ttfを追加することです。

  • 9.4以降、info.plistにフォントファイル名を追加する必要はなくなったようです。

于 2018-07-09T13:47:45.660 に答える
0

redent84のソリューションは素晴らしかったです!

改善を加え、NSObjectにカテゴリを追加するだけなので、一度だけ行う必要があります。

NSObject + CustomFont.h

#import <Foundation/Foundation.h>

@interface NSObject (CustomFont)

@property (strong, nonatomic) NSString *fontName;
@property (strong, nonatomic) UIFont *font;

@end

NSObject + CustomFont.m

#import "NSObject+CustomFont.h"

@implementation NSObject (CustomFont)

@dynamic font;

- (NSString *)fontName
{
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName
{
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}

@end
于 2014-08-06T17:06:54.107 に答える
0

これらはどれも私にはうまくいきませんでしたが、これはうまくいきました。

#import <UIKit/UIKit.h>

@interface UILabelEx : UILabel


@end

#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];   
}
@end
于 2015-11-13T09:12:29.957 に答える