ナビゲーションバーの[戻る]ボタンの色を変更する


192

[設定]ボタンの色を白に変更しようとしていますが、変更できません。

私はこれらの両方を試しました:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

ただし、変更はありません。次のようになります。

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

ボタンを白にするにはどうすればよいですか?

回答:


283

ストーリーボードのグローバルティントカラーを変更するには、ボードの空のスペースをクリックして、右側のツールバーで[ファイルインスペクタを表示]を選択します。ツールバーの下部に[グローバルティント]オプションが表示されます。

ストーリーボードのグローバルティントオプション


7
うわー..いい発見!これをプログラムで行う方法を知っていますか?
Paul Lehn

10
すばらしい発見ですが、グローバルティントを白に変更すると(元の質問ごとに)、テーブルビューの詳細開示インジケーターなどが白に変更され、問題のテーブルで非表示になります。
マイクフィッシャー

1
Mikeの問題に加えて、このコントロールはすべてのテキストボタンをこの色にするので、それらを手動で色に設定する必要があります(つまり、デフォルトの色は明らかにありません)か、別の方法を使用するだけです。
サイレン2016

4
これはすばやく簡単に修正できますが、色が白/背景と一致している場合、他の問題が発生します。テキストフィールドがある場合、カーソルが目立たなくなり、カーソルが表示されないためにテキストフィールドに書き込むことができないかのようにユーザーに見えます。
Jose Ramirez

5
で、プログラム的にこれを行うに@PaulLehn AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)あなたが書くことができます:self.window!.tintColor = .yourColor
mmika1000

205

このコードは矢印の色を変更します

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

これが機能しない場合は、以下のコードを使用してください。

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3ノート

UIColor.whiteColor() および同様のものは簡略化されています UIColor.white

また、以前は暗黙的だったオプションの多くが明示的に変更されているため、次のものが必要になる場合があります。

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()私のために働いた(Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor()が機能しました(Swift 3)
Ajay.km

UIBarStyle.Blackを使用する理由を説明できますか?
mmika1000 2017年

更新してください:self.navigationController?.navigationBar.tintColor =
mohonish

1
矢印が変わるだけで、Xcode 11でもバックテキストは同じままです
jeff ayan


55

あなたはこれを使うべきです:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

これによりボタンは白になりましたが、背景色はかなり明るくなりました。バーの背景を再びフルカラーにする方法を知っていますか?
Brandon Evans、

これが正解です。これは、barTintColorとタイトル/バーボタンを白に設定することにより、バーを紫色にします。
zirinisp 2017

35

迅速

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
迅速に使用してください3.
Deepak Tagadiya '19 / 07/19

また、使用できる迅速なバージョンを教えてください。
Deepak Tagadiya

そして、どのクラス/ファイル/ vcがこのコードをプロジェクトに書き込みますか?
Deepak Tagadiya

viewWillAppearで呼び出される関数setCloseButton()の先頭。
Jayprakash Dubey 2017

NextViewController.swiftファイルに書き込み、viewDidLoad()にも書き込みます。
Deepak Tagadiya

20

このように使えます。中に入れAppDelegate.swiftます。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

Swift 4.2

アプリのテーマ全体を変更

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        UINavigationBar.appearance().tintColor = .white

        return true
    }

特定のコントローラーを変更する

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

すべてのアプリケーションの色を変更します。特定の画面/特定のものに変更する必要がある場合はどうなりUINavigationControllerますか?
Vyachaslav Gerchicov

上記の回答の@VyachaslavGerchicovは、特定のコントローラーを変更する場合の完全なアプリテーマ用です。次のようにします:let navController = UINavigationController.init(rootViewController:yourViewController)navController.navigationBar.tintColor = .red
AiOsN

iOS 13を使用している場合は、didFinishLaunchingWithOptionsを使用しなくなり、SceneDelegateに移動しました。
JBarros35

15

Swift3、ためには、[戻る]ボタンを設定しますred

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

これにより、バーボタンアイテムではなく、ナビゲーションバーが設定されます
carlodonz

1
はい、それが問題でした。
Vincent

「ナビゲーションバーの[戻る]ボタンの色を変更する」
carlodonz

これが私にとって有効な唯一の方法でした。今のところAppleの実装に問題があるようです...
Dave Y

13

Swift 4では、次の方法でこの問題に対処できます。

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

スウィフト3

最も投票された答えはSwift 3には正しくありません。

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

色を変更する正しいコードは次のとおりです。

self.navigationController?.navigationBar.tintColor = UIColor.white

色を変更したい場合は、上のUIColor.whiteを目的の色に変更します


これが私にとって有効な唯一の方法でした。今のところAppleの実装に問題があるようです...
Dave Y

7

すべての回答設定はUINavigationBar.appearance().tintColor、のAppleのドキュメントと競合しUIAppearance.hます。

iOS7に関する注意:iOS7では、tintColorプロパティがに移動しUIView、特別な継承動作がで説明されていUIView.hます。この継承された動作は、外観プロキシと競合する可能性があるため、外観プロキシでtintColorは許可されなくなりました。

Xcodeでは、ヘッダーファイルを調べてプロパティに注釈が付けられていることを確認するために、Appearance Proxyで使用する各プロパティをコマンドクリックする必要があります。 UI_APPEARANCE_SELECTOR

したがって、外観プロキシを介してアプリ全体でナビゲーションバーを紫に、タイトルとボタンを白に着色する正しい方法は次のとおりです。

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

UIBarButtonItemのサブクラスではないUIViewのではなくNSObject。そのtintColorプロパティはtintColorから継承されていませんUIView

残念ながら、UIBarButtonItem.tintColor注釈は付けられてUI_APPEARANCE_SELECTORいませんが、ドキュメントのバグのようです。このレーダーでの Apple Engineeringからの応答は、サポートされていると述べています。


UINavigationBar.appearance()。largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white] //また
Guilherme

6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

このスニペットは魔法です。redColorの代わりに、希望どおりに変更します。


6

このコードを内のAppDelegateクラスで使用しますdidFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

このコードを試してみましょう:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

、非常にありがとうございます
Arpit B Parekhの


4

「設定」ビューコントローラーに既に戻るボタンがあり、「支払い情報」ビューコントローラーの戻るボタンの色を別の色に変更したい場合は、「設定」ビューコントローラーの内部で行うことができます。 :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

これは私、iOS 9.0以降で機能します


2

次のコードを追加しdidFinishLaunchingWithOptionsの中の関数AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

このコードは私に次のエラーを与えます:「未解決の識別子 'uicolorFromHex'の使用」誰かがそれを解決するのを手伝ってくれる?
jonathan3087 2017年

おそらくUIColorの拡張機能です。拡張を作成する方法をstackoverflowで検索できます。
KvdLingen 2017

2

Swift 2.0の場合、ナビゲーションバーのティントカラーを変更するには、タイトルテキスト戻るボタンのティントカラーをAppDelegate.swiftで次のように使用して変更しました。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

なぜ誰もこれについて言及しなかったのかわかりません...しかし、私はあなたが私の中でやっていたことを正確にやっていましたviewDidLoad...そしてそれはうまくいきませんでした。次に、コードをviewWillAppear、それはすべてうまくました。

上記の解決策は、単一の barbuttonItem を変更することです。コード内のすべての navigationBar の色を変更したい場合は、この回答に従ってください

基本的に、使用してクラス自体にappearance()変更することは、アプリのそのビューのすべてのインスタンスでグローバルな変更を行うようなものです。詳細はこちら


1

あなたには一つの選択肢があり、あなたの戻るボタンを隠し、あなた自身でそれを作ります。次に、その色を設定します。

私はそれをしました:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
質問は具体的には左側のナビゲーションアイテムのスタイリングに関するもので、これは質問に直接回答するのに最も近い方法です。
クラフト

0

-(void)viewDidLoadのこの行で解決されます:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro 2018年

0

この行を追加する必要があります

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

グローバルuiを設定したり、ViewControllerに配置したりするよりも、カスタムNavigationControllerを好みます。

これが私の解決策です


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

また、あなたのようなAppleのAPIで混乱する必要はありませんEKEventEditViewControllerPickerViewControllerので、あなたがグローバル設定を使用する場合、UIが好きにUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.