İOS 8'de çubuk çubuğu, renk tonu ve başlık metni rengi


177

Durum çubuğundaki arka plan metni hala siyahtır. Rengi beyaza nasıl değiştiririm?

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

resim açıklamasını buraya girin

Yanıtlar:


312

Içinde AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)ben aşağıdakileri koymak:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]

(Yerine Swift 4 veya daha önceki kullanım NSAttributedStringKeyiçin NSAttributedString.Key)

İçin titleTextAttributes, dokümanlar ki:

Metin özellikleri sözlüğünde başlık için yazı tipini, metin rengini, metin gölge rengini ve metin gölge ofsetini belirleyebilirsiniz.


6
karşılıklı gezinme çubuklarımız varsa ne olur?
sumit

6
tintColor Xcode 7.3.1 için çalışmaz. Metin hala siyahtır.
triiiiista

1
Xcode 8.2'de titleTextAttributes otomatik olarak tamamlanmaz, ancak çalışır.
okysabeni

barTintColor hala gerekli mi? bu satır silme hala çalışıyor
rgkobashi

122

Alex'in cevabını seviyorum. Hızlı bir şey denemek ViewControlleristiyorsanız kullandığınızdan emin olun

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // swift 4.2
}

resim açıklamasını buraya girin


Ama iso 8.1 kullanıyorum
Saorikido

1
neden viewWillAppear ()? Ben viewDidLoad bunu yapıyorum ve iyi çalışıyor.
Adam Johns

4
Çünkü UIView'i her görüntülediğinizde ayarlanmasını istiyorsunuz. ViewDidLoad () yönteminde bir UITabBar görünümünde ayarladıysanız, tekrar ayarlandığı başka bir sekmeye gidin, sonra geri dönün, orijinal görünüm yalnızca bir kez yüklendiğinden üzerine yazılır.
FractalDoctor

2
Hızlı 4 için güncelleme - NSForegroundColorAttributeNameşimdi olmalıNSAttributedStringKey.foregroundColor
Alan Scarpa

3
Swift 4.2 Güncellemesi: NSAttributedString.Key.foregroundColoryerineNSForegroundColorAttributeName
Stephane Paquet

81

Evrensel rengini değiştirmek için bu kod oturmamalıdır NavigationControllerbireyin viewDidLoadfonksiyonu:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

Başına bunu değiştirmek için ViewControllerbaşvurmak zorunda kalacak NavigationControllerdan ViewControllerda benzer çizgiler ve yazma ViewController'ın viewWillAppearfonksiyonu.


Bu yöntemleri kullanmak için NavigationController'ı nasıl geçersiz kılabilirim?
AG1

NavigationController'ı geçersiz kılmaz, yalnızca ViewDidLoad işlevinde değiştirirsiniz. Yukarıdaki cevabımı güncelledim.
Alex

1
Yani bir geliştirici sadece çalışma alanına NavigationController.swift eklemek zorunda? Eğer öyleyse bu temiz!
AG1

5
@ AG1 Bu yanlış, sadece yeni bir dosya eklemek NavigationController.swift yeterli değildir, varsayılan olarak Genel UINavigationController kullanacağından, Storyboard'daki Gezinti Denetleyicinizi Kimlik Denetçisinde bu dosyaya bağlamanız gerekir.
kakubei

2
Tüm bunları, özel bir gezinme denetleyicisi oluşturmaya gerek olmadan film şeridinde de yapabilirsiniz. Çubuk Dişi ve Stil özellikleri doğrudan orada Özellikler denetçisinin altındadır.
Markymark

31

Hızlı 5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

Hızlı 4

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

2
Aldım: 'NSAttributedStringKey' ('NSString' olarak da bilinir) 'üyesi yok' foregroundColor '
Alfi

Lütfen en son sürüm xcode 10 ve swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam

16

Objektif-c çalışmak için aşağıdaki satırları viewWillAppearbenim CustomViewController koymak gerekir .

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

For Swift2.x bu çalışır:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor()

For Swift3.x bu çalışır:

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

Ama başka bir görüntü denetleyicisine döndüğümde renk de değişti. Bunu nasıl önleyeceğiniz hakkında herhangi bir fikir. Benim ana görüşüm denetleyicisinin bir renk diğerinin başka olmasını istiyorum.
user3163404

1
Yeni görünüm denetleyicinizde de rengi ayarlamanız gerektiğini düşünüyorum.
Niko Klausnitzer

13

Bu işi film şeridinde yapmak için (Interface Builder Inspector)

Yardımı IBDesignableile Arayüz Oluşturucu Denetçisine daha fazla seçenek ekleyebilir UINavigationControllerve bunları storyboard'da düzenleyebiliriz . İlk olarak, projenize aşağıdaki kodu ekleyin.

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

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

Ardından, storyboard'da UINavigationController için öznitelikleri ayarlayın.

resim açıklamasını buraya girin


7

Tüm uygulama için renk tonu ve çubuk rengini ayarlamak istiyorsanız, AppDelegate.swift in aşağıdaki kod eklenebilir

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

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

Gezinme çubuğuTintColor ve tintColor ayarlandı


6

Hızlı 4 ile güncellendi

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}

6

Swift5 ve Xcode 10'da

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes

Bu kod snippet'i soruyu çözebilir, ancak bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
31piy

4

Albert'in cevabının Swift 4.2 versiyonu

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]

Bu yanıtı nasıl eklediğinizi çok beğendim. .barTintColor artık bir seçenek değil. Şunu mu demek istedin .backgroundColor?
Ben

4

Swift 4.2 sürümünde gezinme çubuğu başlığının metin rengini beyaz olarak ayarlama:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

3

Hızlı 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}

3

Hızlı 4.1

ViewDidLoad öğesine bir işlev ekleyin

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

In setup()fonksiyon ekleme:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }

1

TitleTextAt özel renk için NavigationBar, burada Swift 3 için basit ve kısa bir kod:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

veya

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

1

Swift 4.2 içinde

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

1

Swift 3.2 ile hızlanın (Swift 4.0 değil)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black

0

Swift 3'te bu işe yarar:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]

0

Swift 5.1

Sadece kopyalayın ve yapıştırın ViewDidLoad()ve ihtiyacınız olan boyut ve boyutunu değiştirin. Kopyalama ve yapıştırmadan önce Ekranın üstüne Gezinme Çubuğu ekleyin.

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

Çalışmazsa, yalnızca metin rengini değiştirmeyi deneyebilirsiniz

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.