İ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.