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.