IOSプロジェクトにフォントを追加しました。プロジェクト内にあり、プロジェクトのビルド時にコピーされます。これは有効なフォントのように見え、アプリを介してデバイス上のすべてのフォントを一覧表示すると表示されます。フォントを含めるためにplistを適切に設定しています。 Xcode 4.2のストーリーボードセクションのテキストコントロール、ボタンなどで使用するには、検索結果が表示されないようです。さらに、フォント名を入力できるようには見えず、フォントダイアログを使用するように強制されます。私もこのフォントをシステムにインストールしようとしましたが、このリストに表示させることができません。コードでのみこれを行う必要がありますか、またはストーリーボードインターフェイスを介してこれを行うことはできますか?
これをコードで動作させることができますが、ストーリーボードを介してこれを行う方がはるかに便利です。
私はこの質問がかなり古いことを知っていますが、iOS 5のStoryboard(またはInterface Builder)でカスタムフォントを簡単に指定する簡単な方法を見つけるのに苦労しており、非常に便利なソリューションを見つけました。
まず、 このチュートリアル に従って、プロジェクトにフォントを追加したことを確認します。また、UINavigationBar、UITabBar、およびUISegmentedControlカスタムフォントは、setTitleTextAttributes:
メソッドの IAppearanceプロキシ 。
UIButton、UITextField、UILabel、およびカスタムフォントを必要とするその他のコンポーネントのプロジェクトに以下のカテゴリを追加します。カテゴリは、フォントサイズを維持しながら要素の現在のフォントを変更する新しいプロパティfontName
を実装するだけです。
ストーリーボードでフォントを指定するには、目的の要素(ラベル、ボタン、テキストビューなど)を選択し、ユーザー定義のランタイム属性をキーパスに設定してfontNameタイプStringおよびカスタムフォントの名前の値。
それだけです。カテゴリをインポートする必要さえありません。この方法では、カスタムフォントを必要とするすべてのUIコンポーネントにアウトレットが必要なく、手動でコーディングする必要もありません。
フォントはストーリーボードには表示されませんが、デバイスまたはシミュレーターで実行すると表示されます。
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
また、ダウンロード可能 Gistから および 単一ファイル としても。
fontName
プロパティが指定されていないためにランタイムエラーに対して実行する場合は、フラグ-all_load
underその他のリンカーフラグプロジェクト設定で、リンカーにカテゴリーを含めるように強制します。
Xcode6.0以降、 Xcode6.0 release 注:
Interface Builderは、設計時に埋め込まれたカスタムiOSフォントをレンダリングし、完成したアプリがどのように見えるかを正しい寸法でより正確にプレビューします。
ストーリーボードでラベルのフォントを設定できます。次のようにできます
フォントファイルをXcodeプロジェクトにインポートする
app-info.plistで、という名前のキーを追加しますアプリケーションによって提供されるフォント。これは配列タイプで、すべてのフォントファイル名を配列に追加します、注:ファイル拡張子を含めます
これはXCodeのバグであり、3.x以降に存在し、まだ修正されていません。私も同じ問題に直面しており、運が悪かったのでシステムに追加しようとしました。別のSOそれについての投稿 Interface Builderでフォントが表示されない
Monjerの答えは正しいものです。私のように、コンパイル後に追加されたフォントが表示されない場合は、ビルドフェーズにフォントを追加してください(ターゲット->ビルドフェーズ->バンドルリソースのコピー->フォントファイルの追加)
XCode 9.4の時点では、XCodeはまだストーリーボードのフォントを直接尊重していません。設計時には表示できますが、実行時には表示できません。 fontWithName APIを使用している場合、nilを返すことがわかりますが、storyboard/xibで使用した場合、なぜ表示されないのかを知る方法はありません。
実行時にStoryboard/XIBから簡単に機能するようにする唯一の方法は、Copy Bundle Resources
ビルドフェーズに.ttc/.ttfを追加することです。
9.4の時点で、info.plistにフォントファイル名を追加する必要はなくなりました。
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
これらのどれも私にとってはうまくいきませんでしたが、これはうまくいきました。
#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