AppDelegateからUINavigationBarの背景色を変更する方法


90

UINavigationBar背景画像を変更する方法を知っています

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

そして、バーをそれぞれの中で異なる色に設定する方法を知っていますViews... 画像使用せずに背景色から単色に変更したいと思いapp delegateます。各ビューから毎回設定したくないし、を書きたくありませんCGRect

試しました [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];が動作しません。アプリのデリゲートで動作するコードがどこにも見つかりません。

誰か私を正しい方向に向けてもらえますか?

回答:


202

使用できます [[UINavigationBar appearance] setTintColor:myColor];

iOSの7以来、あなたは設定する必要[[UINavigationBar appearance] setBarTintColor:myColor];もと[[UINavigationBar appearance] setTranslucent:NO]

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

おかげで、上から来るデフォルトの白いグラデーションを削除して無地にする方法を知っていますか?
ジョナサン・サーフト

1
tintColor勾配のままになります。このグラデーションが必要ない場合は、UINavigationBarをサブクラス化するか、外観のUIImageを作成する必要があります。
Seb Thiebaud

59
機能しないiOS 7では、私は使用しなければなりませんでしたnavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentプロパティは、iOS 6およびiOS 7のUIAppearanceを使用して設定することはできません。その[[UINavigationBar appearance] setTranslucent:NO]ため、NSInvalidArgumentExceptionエラーでアプリがクラッシュします。[self.navigationController.navigationBar setTranslucent:NO]IBを使用して透明度を使用または選択解除します。
2014

1
Swiftバージョン: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034 2018年

103

色合いではなく背景色を変更するには、次のコードを使用します。

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
これは受け入れられる答えであるはずで、iOS7で完全に動作します。
joshuahornby10 2014年

iOS 7の正解。私のために働いています。
LondonGuy 14

半透明性は、これを機能させるための要件です。受け入れられた回答にはそれが含まれていないので、これは受け入れられた回答であるべきです。
Tristan Warner-Smith

3
明確にするために、受け入れられた答えはAppDelegateに対するものであり、これはView Controller内に対するものです。
2014年

@Deanは正しいです。受け入れられた回答は、新しく作成されたに対して有効になりますがUIViewControllers、これが呼び出されるたびに効果が表示されます。
aramusss 2015


15

Swift構文:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

それをAppDelegateのdidFinishLaunchingWithOptionsに入れるだけで、アプリ全体に持続します


8

スウィフト

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

6

これはXcode 6.3.1で簡単に実行できます。ドキュメントのアウトラインでNavigationBarを選択します。属性インスペクタを選択します。半透明のチェックを外します。バーティントを希望の色に設定します。できた!


おかげで、ObjCで迅速にこれを行う方法について多くのリファレンスを見つけましたが、IBで利用できることについて誰も言及していませんでした
Nick

3

他の回答が言及するように、あなたは使うことができます setTintColor:、単色が必要であり、淡色の設定を行うことはできません。

解決策は、プログラムで画像を作成し、その画像をを介してすべてのナビゲーションバーの背景画像として設定することUIAppearanceです。画像のサイズについて、1x1ピクセルの画像が機能するかどうか、またはナビゲーションバーの正確なサイズが必要かどうかはわかりません。この質問の 2番目の回答を確認してください。画像の作成方法についてを確認してください。

アドバイスとして、私はこれらのタイプのものでアプリデリゲートを「オーバーロード」するのは好きではありません。私がしがちなのは、必要なすべてのUIAppearance要素を設定したAppearanceConfigurationパブリックメソッドを1つだけ持つクラスを作成し、configureAppearanceそのメソッドをアプリのデリゲートから呼び出すことです。


2

このコードを任意のビューコントローラーで使用して、UINavigationの背景色を設定できます。

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

Swift 4.2およびXcode 10.1

ナビゲーションバーの色をAppDelegateからプロジェクト全体に直接変更できます。

didFinishLaunchingWithOptions launchOptions:コードの行に以下の書き込み

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

ここに

tintColorは、戻るボタンやメニュー行の画像などの背景画像を設定するためのものです(以下の左および右のメニュー画像を参照)。

barTintColorはナビゲーションバーの背景色用です

特定のビューコントローラーのナビゲーションバーの色を設定する場合は、以下のコードを記述します viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

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


-1

カラーコードはここで問題です。195/255を使用する代わりに、0.7647または195.f / 255.fを使用してください。問題は、フロートの変換が正しく機能していないことです。正確な浮動小数点値を使用してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.