iOS 7でナビゲーションバーの色を変更する方法


213

iOS 7でナビゲーションバーの色を変更するにはどうすればよいですか?

基本的に私はTwitter Nav Bar(iOS7そのために更新されたTwitter )のようなものを実現したいと考えています。の上にナビゲーションバーを埋め込みましたview controller。必要なのは、上部のユーティリティバーと共に、ナビゲーションバーの色を水色に変更することだけです。にオプションが見つからないようですstoryboard



[[UINavigationBarの外観] setBarTintColor:[UIColor blackColor]]; これはiOS 7以降で動作します
Chandramani

1
このチュートリアルに従います appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

回答:


319

tintColorforバーの動作はiOS 7.0で変更されました。バーの背景には影響しなくなりました。

ドキュメントから:

barTintColor クラスリファレンス

ナビゲーションバーの背景に適用するティントカラー。

@property(nonatomic, retain) UIColor *barTintColor

説明
この色は、translucentプロパティをに設定しない限り、デフォルトで半透明になりますNO

可用性

iOS 7.0以降で利用できます。

UINavigationBar.hで宣言

コード

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

iOS 7 UI移行ガイドで言及されているように、これを使用してiOSバージョンを確認することもできます

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDIT 使用XIB

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


3
しかし、このコードはどこに配置できますか?私はこのハハに非常に新しいです。アプリデリゲート内に配置しましたが、実際にはあまり機能していないようです。それでもうまくいきます。
Patricio Guerra 2013

1
viewControllerの内側
Rajneesh071

1
私はそれをあなたのviewControllerのviewDidLoadに入れます。
HalR 2013年

2
もし(床(NSFoundationVersionNumber)<= NSFoundationVersionNumber_iOS_6_1)これは、あなたが移行ガイドにアップルが述べたように、上で実行しているどのiOSのバージョンより良いテストに次のようになります。 developer.apple.com/library/ios/documentation/userexperience/...を
デビッドトンプソン

1
if([self.navigationController.navigationBar respondsToSelector:@selector(setBarTintColor :)])とバージョン番号を使用して、barTintColorを設定できるかどうかを確認することもできます
SimpsOff

129

元の質問が行ったこと、つまり古いTwitterのナビゲーションバーの外観、青い背景に白いテキストを取得することは、XcodeのInterface Builderを使用するだけで非常に簡単です。

  • ドキュメントのアウトラインを使用して、ナビゲーションバーを選択します。
  • [属性インスペクタ]の[ナビゲーションバー]グループで、スタイルを[デフォルト]から[黒]に変更します。これにより、ナビゲーションバーとステータスバーの背景色が黒に、テキストが白に変わります。そのため、アプリの実行中は、ステータスバーのバッテリーやその他のアイコンとテキストが白く見えます。
  • 同じナビゲーションバーグループで、バーの色合いを好みの色に変更します。
  • ナビゲーションバーにバーボタンの項目がある場合でも、テキストはデフォルトの青色で表示されるため、[属性インスペクター]の[表示]グループで[色合い]を[白の色]に変更します。

それはあなたがあなたが望むものを得るはずです。変更箇所を簡単に確認できるスクリーンショットを次に示します。

iOSシミュレーターでの結果を含む、必要な変更を行う場所

バーの濃淡のみを変更しても、ナビゲーションバーまたはステータスバーのテキストの色は変更されないことに注意してください。スタイルも変更する必要があります。


iOS 9で黒を選択することは非推奨であり、更新された回答がある可能性があります
Rob85

@ Rob85私は現在Xcodeの前にいませんが、Xcode 7(iOS 9付き)がリリースされたとき、これらの手順がまだ最新であることを確認しました。ナビゲーションバーが選択されていることを確認してください。黒いスタイルは、ナビゲーションバーの属性インスペクターにあるはずです。
alondono 2015年

2
@ Rob85 Appleの開発者向けWebサイトとスタイルDefaultを確認しましたBlackが、iOS 9でも引き続き使用できます。廃止されたものはBlackOpaqueおよびでBlackTranslucentBlackスタイルと半透明のチェックボックスの組み合わせに置き換えられました。Appleの開発者向けWebサイトの
UIBarStyle

申し訳ありませんが、@ alondono正解です。ドキュメントアウトラインにないナビゲーションコントローラのナビゲーションバーをクリックしていたので、表示されませんでした。非推奨となった黒は、シミュレートされたメトリック->ステータスバーにありました。返信ありがとう
Rob85

@ Rob85かっこいい!知らせてくれてありがとうございます。
alondono

76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color

4
そして、正確にどこにこのコードを置くことができますか?初心者向けの質問で申し訳ありませんが、
Patricio Guerra

1
コードは、ナビゲーションコントローラーの-(void)viewDidLoadメソッドに配置できます
pNre

2
iOS 9では、barTintColorを黒に設定すると、時間、デバイス名、およびバッテリーも黒になり、表示されなくなります。これを回避するには、barTintColorを使用する代わりに、self.navigationController.navigationBar.barStyle = UIBarStyleBlack;を使用します。
TheJeff

46

ナビゲーションベースのアプリでは、AppDelegateにコードを配置できます。より詳細なコードは次のとおりです。

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];

6
[[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];iOS 7向けに追加
Samin 2014

24

viewDidLoad、次のように設定します。

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

blueColor)を好きな色に変更します。


18

ナビゲーションバーの色をすばやく変更するには:

self.navigationController?.navigationBar.barTintColor = UIColor.red

タイトルのフォント、サイズ、色を変更:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]

14

iOS 7では、-barTintColorプロパティを使用する必要があります。

navController.navigationBar.barTintColor = [UIColor barColor];

13

16進コードを使用する場合は、次の方法が最適です。

まず、これをクラスの先頭で定義します。

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

次に、「アプリケーションdidFinishLaunchingWithOptions」内に次のように配置します。

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

00b0f0の代わりに16進コードを入力します。


1
[UINavigationBarの外観]は非常に役に立ちました。
ケン

11

ios6とios7をサポートする必要がある場合は、UIViewControllerでこれを使用して特定のライトブルーを取得します。

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}

3
iOS 7の場合:-self.navigationController.navigationBar.barTintColorはバーの色であり、-self.navigationController.navigationBar.tintColorはボタンのテキストの色です(戻る、完了...)。
IgniteCoders 2013年

10

これは、私がここで見た答えよりも実際には簡単です。

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

これが誰かの役に立つことを願っています。見た答えが気に入らなかった。私は自分のコードをできるだけきれいにしておくのが好きです。プログラムでそれを行うのは間違っていると言っているわけではありませんが、私のような人がいます...これは皆さんのためです。 ナビゲーションバーの色を変更する


おかげで、私はこの数か月前に遊んでいる間に変わっていて、それを元に戻す方法がわかりませんでした!
対称

問題ありません。誰かを助けることができてうれしいです
pqsk 2014

これが最も簡単な答えだと思います!Thx
Ispas Claudiu

問題ない。それがまだ役に立ってうれしい
pqsk 2015年

5

Rajneesh071のコードを完成させるために、デフォルトの動作がiOS 6から7に変更されたため、ナビゲーションバーのタイトルの色(および必要に応じてフォント)を設定することもできます。

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}

5

このコードのみをViewContorller またはに追加しますAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}

4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}

4

ナビゲーションベースのアプリケーションでは、色を変更できます

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}

1
iOS7でtintColorプロパティを変更しても、バーの背景色を変更する効果はなくなりました。iOS7のティントカラーは、BarButtonItemsなどのテキストカラーにのみ影響します。–
Pascal Bayer

4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }

3

この質問とこれらの回答は役に立ちます。彼らと私はnavigationBar白いタイトルとボタンのテキストで希望の濃い青色を設定することができました。

ただし、クロック、キャリア、信号強度などを白に変更する必要もありました。黒は濃い青とのコントラストが不十分でした。

私は以前の回答の1つでその解決策を見落としていたかもしれませんが、この行をトップレベルviewControllerのに追加することでその変更を行うことができましたviewDidLoad

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContent動作しますが、正しい列挙型は次のようsetBarStyle:ですUIBarStyleBlack
Collin Allen


3

色について:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

画像用

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.