288

iOS ナビゲーション バーのタイトルの色がデフォルトで白になっているようです。別の色に変更する方法はありますか?

navigationItem.titleView画像を使ったアプローチは承知しています。私のデザインスキルは限られており、標準の光沢が得られなかったので、テキストの色を変更することを好みます.

どんな洞察も大歓迎です。

4

32 に答える 32

424

現代的なアプローチ

ナビゲーション コントローラー全体に対する最新の方法は、ナビゲーション コントローラーのルート ビューが読み込まれるときに、これを 1 回実行します。

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

ただし、これは後続のビューには影響しないようです。

古典的なアプローチ

View Controllerごとの古い方法(これらの定数はiOS 6用ですが、iOS 7の外観でView Controllerごとに実行したい場合は、同じアプローチが必要ですが、定数が異なります):

UILabelのとしてを使用する必要がありtitleViewますnavigationItem

ラベルは次のことを行う必要があります。

  • 背景色を明確にする ( label.backgroundColor = [UIColor clearColor])。
  • 太字の 20pt システム フォント ( label.font = [UIFont boldSystemFontOfSize: 20.0f]) を使用します。
  • アルファ 50% の黒の影を付けます ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5])。
  • テキストの配置も中央揃えに設定する必要があります ( label.textAlignment = NSTextAlignmentCenter(UITextAlignmentCenter古い SDK の場合) )。

ラベル テキストの色を任意のカスタム カラーに設定します。テキストが読みにくい影に溶け込まないような色が必要です。

試行錯誤しながらこれを解決しましたが、思いついた値は最終的に単純すぎて、Apple が選んだものにはなりませんでした。:)

これを確認したい場合は、このコードを Apple の NavBar サンプル にドロップしinitWithNibName:bundle:ください。これにより、テキストが黄色のラベルに置き換えられます。これは、色を除いて、Apple のコードによって作成されたオリジナルと見分けがつかないはずです。PageThreeViewController.m

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // this will appear as the title in the navigation bar
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:20.0];
        label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        label.textAlignment = NSTextAlignmentCenter;
                           // ^-Use UITextAlignmentCenter for older SDKs.
        label.textColor = [UIColor yellowColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = NSLocalizedString(@"PageThreeTitle", @"");
        [label sizeToFit];
    }

    return self;
}

編集:また、以下のErik Bの回答を読んでください。私のコードは効果を示していますが、彼のコードはこれを既存のView Controllerにドロップする簡単な方法を提供しています。

于 2009-03-07T02:30:29.587 に答える
226

これがかなり古いスレッドであることは承知していますが、新しいユーザーにとって、iOS 5 がタイトル プロパティを確立するための新しいプロパティをもたらすことを知っておくと役立つと思います。

UINavigationBar を使用setTitleTextAttributesして、フォント、色、オフセット、および影の色を設定できます。

さらに、アプリケーション全体で同じデフォルトの UINavigationBar のタイトル テキスト属性を設定できUINavigationBarsます。

たとえば、次のようにします。

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
于 2011-10-26T22:16:52.243 に答える
180

iOS 5 では、navigationBar のタイトルの色を次の方法で変更できます。

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
于 2012-02-26T16:31:30.363 に答える
128

スティーブンフィッシャーの答えに基づいて、私はこのコードを書きました:

- (void)setTitle:(NSString *)title
{
    [super setTitle:title];
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor yellowColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

このコードの利点は、フレームを適切に処理することに加えて、コントローラーのタイトルを変更すると、カスタムタイトルビューも更新されることです。手動で更新する必要はありません。

もう1つの大きな利点は、カスタムタイトルカラーを有効にするのが非常に簡単になることです。このメソッドをコントローラーに追加するだけです。

于 2011-05-05T13:52:50.207 に答える
40

上記の提案のほとんどは、iOS 7 での使用のために現在廃止されています -

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                               [UIColor whiteColor],NSForegroundColorAttributeName, 
                               [UIColor whiteColor],NSBackgroundColorAttributeName,nil];

self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";

また、設定できるさまざまなテキスト プロパティについては、NSAttributedString.h を確認してください。

于 2013-10-03T12:01:27.363 に答える
14

スウィフト

ほとんどの人が Objective_C バージョンの回答を提示していることがわかりました

必要な方のためにSwiftを使ってこの機能を実装したいと思います。

In ViewDidload

1.NavigationBarの背景を色付きにする(例:BLUE)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2.NavigationBarの背景を画像にする(例:ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3.NavigationBarのタイトルを変更する(例:[Font:Futura,10] [Color:Red])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(ヒント 1: UIFont の後の "!" マークを忘れないでください)

(ヒント 2: タイトル テキストには多くの属性があります。「NSFontAttributeName」をクリックすると、クラスを入力して、必要なキー名とオブジェクト タイプを表示できます)

私が助けてくれることを願っています!:D

于 2015-10-09T10:05:29.143 に答える
14

方法 1、IB で設定:

ここに画像の説明を入力

方法 2、1 行のコード:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
于 2016-04-08T13:45:43.890 に答える
13

iOS 5 以降では、タイトル テキストの色とナビゲーション バーのフォントを titleTextAttribute Dictionary (UInavigation コントローラー クラス リファレンスで定義済みの辞書) を使用して設定する必要があります。

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
于 2012-09-11T07:21:50.117 に答える
13

ページの色を変更しようとしている場合、tewha によるソリューションはうまく機能しますが、すべてのページで色を変更できるようにしたいと考えています。上のすべてのページで機能するように、いくつかの小さな変更を加えました。UINavigationController

NavigationDelegate.h

//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end

NavigationDelegate.m

#import "NavigationDelegate.h"
@implementation NavigationDelegate

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
    UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    //The two lines below are the only ones that have changed
    label.text=viewController.title;
    viewController.navigationItem.titleView = label;
}
@end
于 2010-09-24T02:56:51.243 に答える
8

これは、スティーブンスに基づく私のソリューションです

本当の違いは、テキストの長さに応じて位置を調整するためにいくつかの処理を入れたことです。アップルのやり方と似ているようです

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

フォント サイズに応じて 10 の値を調整することをお勧めします。

于 2010-10-22T14:28:07.290 に答える
6

ナビゲーション ボタンでテキストが中心から外れて表示されるという問題が発生しました (ボタンが 1 つしかない場合)。それを修正するために、フレームサイズを次のように変更しました。

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
于 2011-01-21T16:07:19.540 に答える
6

navigationBar の背景画像と左ボタン項目をカスタマイズしましたが、灰色のタイトルが背景に収まりません。それから私は使用します:

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

ティントカラーをグレーに変更します。そして今、タイトルは白!それが私が欲しいものです。

また、お役に立てれば幸いです:)

于 2011-05-27T05:37:00.390 に答える
6

これはかなり古いスレッドですが、iOS 7以降のナビゲーションバータイトルの色、サイズ、垂直位置を設定するための回答を提供することを考えています

色とサイズについて

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

縦置き用

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

タイトルを設定し、属性辞書を割り当てます

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
于 2015-06-04T15:05:12.567 に答える
6

子ナビゲーション バーを押したり、タブバーにタイトルを表示したりする際に使用されるため、self.title を設定することをお勧めします。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}
于 2012-05-24T18:50:31.047 に答える
4

オリエンテーションのサポートにはこのように使用します

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];
于 2011-01-17T05:28:43.070 に答える
4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
于 2014-10-30T05:39:06.867 に答える
3

タイトルのフォントサイズを設定するには、次の条件を使用しました。

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;
于 2011-09-15T11:18:05.800 に答える
3

色を設定する適切な方法UINavigationBarは次のとおりだと思います:

NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;

上記のコードは のサブクラスで書かれていますがUINavigationBar、明らかにサブクラス化しなくても機能します。

于 2012-07-09T22:04:27.510 に答える
3

新しい iOS 7 のテキスト属性と最新の目標 c を使用してノイズを減らす Alex RR の投稿の更新:

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
于 2013-11-29T22:35:00.477 に答える
2

navBar にボタンを挿入するとラベルが移動するという同じ問題 (他の問題と同様) に遭遇した後 (私の場合、日付が読み込まれるときにボタンに置​​き換えるスピナーがあります)、上記の解決策は機能しませんでした。私にとっては、これが機能し、ラベルを常に同じ場所に維持したものです。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // this will appear as the title in the navigation bar
    //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
   CGRect frame = CGRectMake(0, 0, 180, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];



    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    self.navigationItem.titleView = label;
    label.text = NSLocalizedString(@"Latest Questions", @"");
    [label sizeToFit];
}

return self;
于 2011-04-14T21:23:40.237 に答える
2

これは、欠けているものの 1 つです。最善の策は、独自のカスタム ナビゲーション バーを作成し、テキスト ボックスを追加して、その方法で色を操作することです。

于 2009-03-01T07:11:35.763 に答える
1

このメソッドは appdelegate ファイルで使用でき、すべてのビューで使用できます

+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;    
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)]; 
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];

//label.text = NSLocalizedString(title, @"");

return label;
}
于 2012-08-20T10:47:36.710 に答える
1

titleTextAttributes バーのタイトル テキストの属性を表示します。

@property(nonatomic, copy) NSDictionary *titleTextAttributes 説明 NSString UIKit Additions Reference で説明されているテキスト属性キーを使用して、テキスト属性ディクショナリ内のタイトルのフォント、テキストの色、テキストの影の色、およびテキストの影のオフセットを指定できます。

提供状況 iOS 5.0 以降で利用可能です。UINavigationBar.h で宣言

于 2012-10-07T05:51:19.243 に答える
1

[label sizeToFit] を呼び出す必要があります。他のボタンがナビゲーションバーを占有しているときにタイトルビューでラベルが自動的に再配置されるときに奇妙なオフセットを防ぐためにテキストを設定した後。

于 2011-03-16T05:11:30.473 に答える
0

Erik Bの優れたソリューションをアプリのさまざまなUIVIewCOntrollerでより使いやすくするために、UIViewControllerのカテゴリを追加し、その中で彼のsetTitle:titleメソッドを宣言することをお勧めします。このように、複製することなく、すべてのViewControllerでタイトルの色を変更できます。

ただし、注意すべき点の1つは、[super setTItle:tilte]は必要ないということです。Erikのコードでは、このメソッドを呼び出すには、ViewControllerでself.title= @ "mynewtitle"を明示的に呼び出す必要があります。

@implementation UIViewController (CustomeTitleColor)

- (void)setTitle:(NSString *)title
{
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor blueColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

@終わり

于 2012-12-31T10:48:40.550 に答える
0

私はiOS 9に以下のコードを使用しており、うまく機能しています。タイトルにも影の色を使用しています。

self.navigationItem.title = @"MY NAV TITLE";
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
shadow.shadowOffset = CGSizeMake(0, 1);
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
                                                       shadow, NSShadowAttributeName,
                                                       [UIFont fontWithName:@"HelveticaNeue-Light" size:21.0], NSFontAttributeName, nil]];

これがあなたを助けますように。

ありがとう

于 2016-07-12T06:40:45.350 に答える