ios - custom - xcode status bar color swift




Modifica del colore della barra di navigazione in Swift (14)

Sto utilizzando una vista di selezione per consentire all'utente di scegliere il tema del colore per l'intera app. Sto pensando di cambiare il colore della barra di navigazione, lo sfondo e possibilmente la barra delle schede (se possibile). Ho cercato come fare questo ma non riesco a trovare esempi Swift. Qualcuno potrebbe per favore darmi un esempio del codice che avrei bisogno di usare per cambiare il colore della barra di navigazione e il colore del testo della barra di navigazione? (Il Picker View è impostato, sto solo cercando il codice per cambiare i colori dell'interfaccia utente)

Grazie.


Swift 3

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

Questo imposterà il colore della barra di navigazione come il colore della barra di Facebook :)


All'interno di AppDelegate , questo ha modificato globalmente il formato del NavBar e rimuove la linea di fondo / il bordo (che è un'area problematica per la maggior parte delle persone) per darti quello che penso tu e gli altri stiate cercando:

 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()] }

Quindi puoi impostare un file Constants.swift e contenere una struttura Style con colori e caratteri ecc. Puoi quindi aggiungere un tableView / pickerView a qualsiasi ViewController e usare l'array "availableThemes" per consentire all'utente di cambiare themeColor.

La cosa bella di questo è che puoi usare un riferimento in tutta la tua app per ogni colore e che verrà aggiornato in base al "tema" selezionato dall'utente e senza uno di default a 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) } ...

Ecco alcune personalizzazioni dell'aspetto di base che puoi applicare a tutta l'app:

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();

Ulteriori informazioni UIAppearance di UIAppearance in Swift sono disponibili qui: https://developer.apple.com/documentation/uikit/uiappearance


Ho dovuto fare

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

altrimenti il ​​colore di sfondo non cambierebbe


In Swift 2

Per cambiare colore nella barra di navigazione,

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

Per cambiare colore nella barra di navigazione degli oggetti,

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

o

navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]

La funzione appearance () non sempre funziona per me. Quindi preferisco creare un oggetto NC e cambiare i suoi attributi.

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()]

Inoltre, se vuoi aggiungere un'immagine invece del solo testo, funziona altrettanto bene

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

Se hai un controller di navigazione personalizzato, puoi utilizzare lo snippet di codice sopra riportato. Quindi nel mio caso, ho usato i seguenti pezzi di codice.

Swift 3.0, versione XCode 8.1

navigationController.navigationBar.barTintColor = UIColor.green

Testo della barra di navigazione:

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

È un colloquio molto utile.


Se stai tornando indietro da un controller di navigazione e devi impostare un colore diverso sul controller di navigazione che hai spinto da te, vuoi usare

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

invece di metterlo nella viewWillAppear in modo che la transizione sia più pulita.


Aggiornamento Swift 4

Basta mettere una riga dentro viewDidLoad()

navigationController?.navigationBar.barTintColor = UIColor.red

Aggiornato per 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

Swift 3 e Swift 4 Compatibile con Xcode 9

Una soluzione migliore per fare una classe per le barre di navigazione comuni

Ho 5 controller e ogni titolo del controller è cambiato in arancione. Dato che ogni controller ha 5 controller di navigazione, ho dovuto cambiare ogni colore sia dall'ispettore che dal codice.

Così ho creato una classe invece di modificare ogni barra di navigazione da codice, ho appena assegnato questa classe e ha funzionato con tutte le 5 abilità di riutilizzo del codice del controller. Devi solo assegnare questa classe a ogni controller e questo è tutto.

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]

 }


  }

Swift 3

Un solo supporto che puoi usare in ViewDidLoad()

//Change Color
    self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

iOS 8 (rapido)

let font: UIFont = UIFont(name: "fontName", size: 17)   
let color = UIColor.backColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)

    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()]

Basta incollare questa riga in didFinishLaunchingWithOptions nel codice.





uinavigationbar