Modification de la couleur de la barre de navigation dans Swift

J'utilise une vue sélecteur pour permettre à l'utilisateur de choisir le thème de couleur pour l'ensemble de l'application. Je prévois de changer la couleur de la barre de navigation, de l'arrière-plan et éventuellement de la barre d'onglets (si cela est possible). J'ai fait des recherches sur la façon de le faire mais je ne trouve aucun exemple rapide. Quelqu'un pourrait-il me donner un exemple du code que je devrais utiliser pour changer la couleur de la barre de navigation et la couleur du texte de la barre de navigation? (La vue du sélecteur est configurée, je cherche juste le code à changer les couleurs de L'interface utilisateur)

Merci.

166
demandé sur narner 2014-07-11 02:18:45

22 réponses

Barre De Navigation:

navigationController?.navigationBar.barTintColor = UIColor.green

Remplacez greenColor par ce que vous voulez UIColor, vous pouvez aussi utiliser un RVB si vous préférez.

Texte De La Barre De Navigation:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

Remplacez orangeColor par la couleur que vous aimez.

Barre D'Onglets:

tabBarController?.tabBar.barTintColor = UIColor.brown

Texte De La Barre D'Onglets:

tabBarController?.tabBar.tintColor = UIColor.yellow

Sur les deux derniers, remplacez brownColor et yellowColor par la couleur de votre choix.

358
répondu trumpeter201 2017-07-13 19:41:25

Voici une personnalisation d'apparence très basique que vous pouvez appliquer à l'échelle de l'application:

UINavigationBar.appearance().backgroundColor = UIColor.greenColor()
UIBarButtonItem.appearance().tintColor = UIColor.magentaColor()
//Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName
UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()]
UITabBar.appearance().backgroundColor = UIColor.yellowColor();

Plus d'informations sur UIAppearance API dans Swift, vous pouvez lire ici: https://developer.apple.com/documentation/uikit/uiappearance

73
répondu Keenle 2017-06-29 13:17:52
    UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0)
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]

Il suffit de coller cette ligne dans didFinishLaunchingWithOptions dans votre code.

46
répondu Mohit tomar 2015-08-10 07:24:18

Dans AppDelegate , cela a globalement changé le format de la barre de navigation et supprime la ligne de fond/frontière (qui est un problème pour la plupart des gens) pour vous donner ce que je pense que vous et les autres recherchez:

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

    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().clipsToBounds = false
    UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }

Ensuite, vous pouvez configurer une constante .swift fichier, et contenu est une structure de Style avec des couleurs et des polices, etc. Vous pouvez ensuite ajouter un tableView / pickerView à N'importe quel ViewController et utiliser le tableau "availableThemes" pour permettre à l'utilisateur de changer themeColor.

Le la belle chose à ce sujet est que vous pouvez utiliser une référence dans toute votre application pour chaque couleur et qu'elle sera mise à jour en fonction du "thème" sélectionné par l'utilisateur et sans elle, elle est par défaut theme1 ():

import Foundation
import UIKit

struct Style {


static let availableThemes = ["Theme 1","Theme 2","Theme 3"]

static func loadTheme(){
    let defaults = NSUserDefaults.standardUserDefaults()
    if let name = defaults.stringForKey("Theme"){
        // Select the Theme
        if name == availableThemes[0]   { theme1()  }
        if name == availableThemes[1]   { theme2()  }
        if name == availableThemes[2]   { theme3()  }
    }else{
        defaults.setObject(availableThemes[0], forKey: "Theme")
        theme1()
    }
}

 // Colors specific to theme - can include multiple colours here for each one
static func theme1(){
   static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) }

static func theme2(){
    static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) }

static func theme3(){
    static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...
23
répondu David West 2016-05-20 15:53:44
UINavigationBar.appearance().barTintColor

Travaillé pour moi

15
répondu Asbar 2015-03-23 18:16:28

Mise à Jour pour Swift 3

// setup navBar.....
UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
15
répondu Jamil Hasnine Tamim 2018-02-01 05:40:30

Pour ce faire sur storyboard (inspecteur de générateur D'Interface)

Avec l'aide de IBDesignable, nous pouvons ajouter plus d'options à Interface Builder Inspector pour UINavigationController et les modifier sur storyboard. Tout d'abord, ajoutez le code suivant à votre projet.

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            guard let uiColor = newValue else { return }
            navigationBar.barTintColor = uiColor
        }
        get {
            guard let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }
}

Ensuite, il suffit de définir les attributs pour le contrôleur de navigation sur storyboard.

entrez la description de l'image ici

Cette approche peut également être utilisée pour gérer la couleur du texte de la barre de navigation à partir du storyboard:

@IBInspectable var barTextColor: UIColor? {
  set {
    guard let uiColor = newValue else {return}
    navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: uiColor]
  }
  get {
    guard let textAttributes = navigationBar.titleTextAttributes else { return nil }
    return textAttributes[NSAttributedStringKey.foregroundColor] as? UIColor
  }
}
15
répondu Fangming 2018-06-03 18:01:25

Utilisez l'API d'apparence et la couleur barTintColor.

UINavigationBar.appearance().barTintColor = UIColor.greenColor()
7
répondu Michael Peterson 2015-03-11 18:47:59

La fonction appearance () ne fonctionne pas toujours pour moi. Je préfère donc créer un objet NC et changer ses attributs.

var navBarColor = navigationController!.navigationBar
        navBarColor.barTintColor = UIColor(red:  255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0)
        navBarColor.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

Aussi, si vous voulez ajouter une image au lieu de simplement du texte, cela fonctionne aussi

var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
        imageView.contentMode = .ScaleAspectFit

        var image = UIImage(named: "logo")
        imageView.image = image
        navigationItem.titleView = imageView
7
répondu GuiSoySauce 2016-03-30 02:36:44

Dans Swift 4

, Vous pouvez changer la couleur de la barre de navigation. Utilisez simplement cet extrait de code ci-dessous dans viewDidLoad()

Couleur de la barre de Navigation

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

Couleur Du Texte De La Barre De Navigation

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]

Pour ios 11 Grande barre de Navigation de titre , vous devez utiliser largeTitleTextAttributes propriété

self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]
5
répondu Vinoth Vino 2017-12-07 12:30:04

IOS 8 (swift)

let font: UIFont = UIFont(name: "fontName", size: 17)   
let color = UIColor.backColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)
4
répondu Long Pham 2015-04-22 07:29:17

Si vous avez personnalisé contrôleur de navigation, vous pouvez utiliser ci-dessus code extrait. Donc, dans mon cas, j'ai utilisé comme morceaux de code suivants.

Swift 3.0, version Xcode 8.1

navigationController.navigationBar.barTintColor = UIColor.green

Texte De La Barre De Navigation:

navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

Ce sont des discussions très utiles.

4
répondu Bogdan Dimitrov Filov 2017-03-18 11:04:07

Swift 4:

Code parfaitement fonctionnel pour changer l'apparence de la barre de navigation au niveau de l'application.

entrez la description de l'image ici

// MARK: Navigation Bar Customisation

// To change background colour.
UINavigationBar.appearance().barTintColor = .init(red: 23.0/255, green: 197.0/255, blue: 157.0/255, alpha: 1.0)

// To change colour of tappable items.
UINavigationBar.appearance().tintColor = .white

// To apply textAttributes to title i.e. colour, font etc.
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white,
                                                    .font : UIFont.init(name: "AvenirNext-DemiBold", size: 22.0)!]
// To control navigation bar's translucency.
UINavigationBar.appearance().isTranslucent = false

Bon Codage!

4
répondu Gaurav Singla 2018-08-02 19:30:58

Dans Swift 2

Pour changer la couleur dans la barre de navigation,

navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

Pour changer la couleur dans la barre de navigation de l'élément,

navigationController?.navigationBar.tintColor = UIColor.blueColor()

Ou

navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
3
répondu Riccardo Caroli 2016-02-28 16:50:09

Swift 3

UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)

Cela définira la couleur de votre barre de navigation comme la couleur de la barre Facebook:)

3
répondu Sazzad Hissain Khan 2017-01-13 04:06:25

Swift 3 et Swift 4 Compatible Xcode 9

Une meilleure Solution pour cela pour faire une classe pour les barres de Navigation communes

J'ai 5 contrôleurs et chaque titre de contrôleur est changé en couleur orange. Comme chaque contrôleur a 5 contrôleurs de navigation, j'ai donc dû changer chaque couleur de l'inspecteur ou du code.

J'ai donc créé une classe au lieu de changer chaque barre de Navigation à partir du code je viens d'attribuer cette classe et cela a fonctionné sur tous les 5 capacité de réutilisation du code du contrôleur. il vous suffit d'attribuer cette classe à chaque contrôleur et c'est tout.

import UIKit

   class NabigationBar: UINavigationBar {
      required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    commonFeatures()
 }

   func commonFeatures() {

    self.backgroundColor = UIColor.white;
      UINavigationBar.appearance().titleTextAttributes =     [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor]

 }


  }
3
répondu Ourang-Zeb Khan 2017-10-22 11:48:57

Mise à jour Swift 4, iOS 12 et Xcode 10

Il suffit de mettre une ligne à l'intérieur viewDidLoad()

navigationController?.navigationBar.barTintColor = UIColor.red
3
répondu Xcodian Solangi 2018-08-10 09:59:53

SWIFT 4-transition En Douceur (meilleure solution):

Si vous revenez d'un contrôleur de navigation et que vous devez définir une couleur différente sur le contrôleur de navigation que vous avez poussé à partir de vous voulez utiliser

    override func willMove(toParentViewController parent: UIViewController?) {
    navigationController?.navigationBar.barTintColor = .white
    navigationController?.navigationBar.tintColor = Constants.AppColor
}

Au lieu de le mettre dans la viewWillAppear donc la transition est plus propre.

3
répondu RickS 2018-10-02 19:11:10

IOS 10 Swift 3.0

Si cela ne vous dérange pas d'utiliser des frameworks swift, alors nous UINeraida pour changer l'arrière-plan de navigation comme UIColor ou HexColor ou UIImage et changer le texte du bouton de navigation de retour par programme, Modifiez la couleur complète du texte de forground.

Pour UINavigationBar

    neraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self)

    //Change navigation title, backbutton colour

    neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self)

    //Change navigation back button title programmatically

    neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self)

    //Apply Background Image to the UINavigationBar

    neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)
2
répondu 2016-12-16 00:52:03

Swift 3

Simple une doublure que vous pouvez utiliser dans ViewDidLoad()

//Change Color
    self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
2
répondu Satnam Sync 2017-07-21 07:50:44

Je devais faire

UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barStyle = .Black
UINavigationBar.appearance().backgroundColor = UIColor.blueColor()

Sinon la couleur d'arrière-plan ne changerait pas

1
répondu Guilherme Carvalho 2016-10-20 10:30:30

Définissez D'abord la propriété isTranslucent de navigationBar sur false pour obtenir la couleur désirée. Ensuite, changez la couleur de la barre de navigation comme ceci:

@IBOutlet var NavigationBar: UINavigationBar!

NavigationBar.isTranslucent = false
NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)
1
répondu Nupur Sharma 2016-12-10 05:22:31