web-dev-qa-db-ja.com

iOS変更ナビゲーションバーのタイトルのフォントと色

だから私はナビゲーションバーのタイトルフォントを変更する必要があるこのコードを持っていますが、

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

このコードで戻るボタンのフォントを変更しても問題なく機能します。

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];
95
aZtraL-EnForceR

タイトルのフォント(および色)を変更する正しい方法は次のとおりです。

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

編集:Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

編集:Swift 4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Swift 3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]
226
Brian

他の答えには何の問題もありません。フォントを設定するためのストーリーボードバージョンを共有しています。

1. Navigation Controller内でNavigation Barを選択します

navbar

2.属性インスペクターでタイトルフォントを変更する

title-font

(Xcodeが新しいフォントを取得する前に、ナビゲーションバーのバーの色合いを切り替える必要があります)

注(注意)

これがXcode 7.1.1+で機能することを確認しました。 (以下のサンプルを参照してください

  1. フォントを有効にする前に、ナビゲーションバーの色合いを切り替える必要があります(Xcodeのバグのようです。デフォルトに戻すと、フォントが固定されます)。
  2. システムフォントを選択する場合〜サイズが0.0でないことを確認してください(そうでない場合、新しいフォントは無視されます)

size

  1. ビュー階層にNavBarが1つしかない場合、これは問題なく機能するようです。同じスタック内のセカンダリNavBarは無視されるようです。 (マスターNavigation ControllerのnavBarを表示する場合、他のすべてのカスタムnavBar設定は無視されることに注意してください)。

落とし穴(deux)

これらのいくつかは繰り返されるため、注目に値する可能性が非常に高いことを意味します。

  1. ストーリーボードxmlが破損する場合があります。これには、ソースコードモードとしてストーリーボードの構造を確認する必要があります(ストーリーボードファイルを右クリックして[名前を付けて開く...])
  2. 場合によっては、ユーザー定義のランタイム属性に関連付けられたnavigationItemタグが、View Controllerタグではなく、Viewタグのxml子として設定されました。その場合、適切な操作のためにタグ間から削除します。
  3. NavBar Tintを切り替えて、カスタムフォントが使用されるようにします。
  4. 動的なフォントスタイルを使用しない限り、フォントのサイズパラメーターを確認します。
  5. ビュー階層は設定を上書きします。スタックごとに1つのフォントが使用できるようです。

結果

navbar-italic

サンプル

カスタムフォントの処理

注〜A 素晴らしいチェックリスト は、ChrisのWebサイトのコードから見つけることができ、サンプルダウンロードプロジェクトを見ることができます。

独自のフォントがあり、それをストーリーボードで使用したい場合は、次の SO Question に適切な回答があります。 1つの答えがこれらの手順を識別します。

  1. カスタムフォントファイル(.ttf、.ttc)を入手する
  2. フォントファイルをXcodeプロジェクトにインポートする
  3. App-info.plistで、application.Itが提供するFontsという名前のキーを追加します。これは配列タイプで、すべてのフォントファイル名を配列に追加します。note:ファイル拡張子を含みます。
  4. ストーリーボードのナビゲーションバーで、属性インスペクターに移動し、フォント選択領域の右アイコンボタンをクリックします。ポップアップパネルで、[カスタムフォント]を選択し、埋め込みフォント名のファミリーを選択します。

カスタムフォントの回避策

そのため、XcodeはUINavigationItemのカスタムフォントを処理できるように見えますが、その機能は適切に更新されません(選択されたフォントは無視されます)。

UINavigationItem

これを回避するには:

1つの方法は、ストーリーボードを使用してコード行を追加することを修正することです。まず、ViewView ControllerにUIView(UIButton、UILabel、または他のUIViewサブクラス)を追加します(Navigation Itemではありません...それ)。コントロールを追加した後、ストーリーボードのフォントを変更し、参照をView Controllerのアウトレットとして追加できます。そのビューをUINavigationItem.titleViewに割り当てるだけです。必要に応じて、コードでテキスト名を設定することもできます。報告されたバグ(23600285)。

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView
50
Tommie C.

これを試して:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
21
Akki

ナビゲーションバーのタイトルを変更するための私のSwiftコード:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

また、背景フォントも変更したい場合は、AppDelegateにこれがあります。

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)
11
Libor Zapletal

質問に対する答えは次のとおりです。

ビューが読み込まれた後にナビゲーションバーのタイトルが更新されるため、コードを以下のメソッドに移動します。 viewDidLoadで上記のコードを追加しようとしましたが、動作しません。viewDidAppearメソッドで正常に動作します。

  -(void)viewDidAppear:(BOOL)animated{}
4

誰でもSwift 3バージョンが必要です。 redColor()redに変更されました。

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]
3
Karl Taylor

迅速:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]
2
karthik

プログラムでNavigationItemのタイトルを変更しようとしたときに、ファミリーフォントが見つからなかった(多くのことを試してみましたが、正しく実行することはできませんでした)ため、1つの問題がありました。

  1. まず、ナビゲーションアイテムの下に真ん中に1つのビューを追加し、backGroundColorをクリアカラーに設定して、navBarと同じ色にすることを忘れないでください。

enter image description here

  1. 次に、このビューで編集できる1つのラベルを追加します(テキストの色、フォント、サイズを設定...)
  2. ラベルの制約を追加し(上部= 0、下部= 0、末尾= 0、先頭= 0)、ラベルのテキストを表示および中央に配置します。

最後に、ドキュメントのアウトラインにそのようなものがあるはずです。

enter image description here

そして、あなたのViewControllerでそのようなもの:

enter image description here

それが役立つことを願っています。

2
O. Boujaouane

リテラルを使用すると、もう少し読みやすくなります。

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };
2
sPoz

アプリのデリゲートにこの1行のコードを追加-Lauchを終了しました。アプリケーション全体でフォント、ナビゲーションバーの色を変更します。

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]
2

iOS 11

enter image description here

Objective-C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}
1
Vivek

Objective-Cでフォントと色を設定する場合

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}
1
Hardik Thakkar

これはSwift 4(@Joshによる回答済み)の代替案です。

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed
1
Hendra Kusumah

コンパイルエラーを回避するために、キーのRaw値を追加することを忘れないでください。

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes
0
James Rochabrun

Swift 4の答えは次のとおりですか????:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes
0
Josh

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]
0
ilkayaktas

この拡張機能を追加

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

ViewDidLoad()に次の行を追加します

self.navigationController?.navigationBar.changeFont()
0
Pranit