Bilah Navigasi, warna, dan warna teks judul di iOS 8


177

Teks latar belakang di bilah status masih hitam. Bagaimana cara mengubah warna menjadi putih?

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

}

masukkan deskripsi gambar di sini

Jawaban:


312

Dalam AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)saya masukkan yang berikut:

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]

(Untuk Swift 4 atau yang lebih lama digunakan NSAttributedStringKeysebagai gantiNSAttributedString.Key )

Karena titleTextAttributes, dokumen mengatakan:

Anda dapat menentukan font, warna teks, warna bayangan teks, dan offset bayangan teks untuk judul dalam kamus atribut teks


6
bagaimana jika kita memiliki bilah navigasi mutiple?
sumit

6
tintColor tidak berfungsi untuk Xcode 7.3.1. Teksnya masih hitam.
triiiiista

1
Dalam Xcode 8.2, titleTextAttributes tidak lengkap secara otomatis tetapi berfungsi.
okysabeni

apakah barTintColor masih diperlukan? menghapus garis itu masih berfungsi
rgkobashi

122

Saya suka jawaban Alex. Jika Anda menginginkan sesuatu yang cepat untuk dicoba, ViewControllerpastikan Anda menggunakannya

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
}

masukkan deskripsi gambar di sini


Tapi saya menggunakan iso 8.1
Saorikido

1
mengapa viewWillAppear ()? Saya melakukan ini di viewDidLoad dan berfungsi dengan baik.
Adam Johns

4
Karena setiap kali Anda melihat UIV, Anda ingin mengaturnya. Jika Anda mengatur di viewDidLoad () mengatakan dalam tampilan UITabBar, pindah ke tab lain di mana itu diatur lagi, lalu kembali itu akan ditimpa karena tampilan asli hanya dimuat sekali.
FractalDoctor

2
Pembaruan untuk swift 4 - NSForegroundColorAttributeNamesekarang seharusnyaNSAttributedStringKey.foregroundColor
Alan Scarpa

3
Pembaruan untuk Swift 4.2: NSAttributedString.Key.foregroundColoralih-alihNSForegroundColorAttributeName
Stephane Paquet

81

Untuk mengubah warna universal, kode ini harus duduk di NavigationController's viewDidLoadfungsi:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Untuk mengubahnya per ViewControllerAnda harus referensi NavigationControllerdari ViewControllerdan menulis garis serupa bahwa ViewController's viewWillAppearfungsi.


Bagaimana cara mengganti NavigationController untuk menggunakan metode ini?
AG1

Anda tidak mengesampingkan NavigationController, Anda hanya memodifikasinya di fungsi ViewDidLoad. Saya memperbarui jawaban saya di atas.
Alex

1
Jadi seorang pengembang hanya perlu menambahkan NavigationController.swift ke ruang kerja? Kalau begitu itu rapi!
AG1

5
@ AG1 Ini tidak benar, hanya menambahkan file baru NavigationController.swift tidak cukup, Anda harus menghubungkan Pengontrol Navigasi Anda di Storyboard ke file ini di Identity Inspector karena secara default akan menggunakan Generic UINavigationController.
kakubei

2
Anda juga dapat melakukan semua ini di storyboard tanpa perlu membuat pengontrol navigasi khusus. Properti untuk Bar Tine dan Style ada di sebelah kanan di bawah inspektur Atribut.
Markymark

31

Cepat 5

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

Cepat 4

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

2
Saya mendapatkan: Ketik 'NSAttributedStringKey' (alias 'NSString') tidak memiliki anggota 'foregroundColor'
Alfi

Silakan gunakan kode di bawah ini untuk versi terbaru xcode 10 dan swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam

16

Untuk bekerja di objektif-c saya harus meletakkan baris berikut di viewWillAppeardalam CustomViewController saya.

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

Untuk Swift2.x ini berfungsi:

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

Untuk Swift3.x ini berfungsi:

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

Tetapi ketika saya kembali ke viewcontroller lain, warnanya juga berubah. Ada ide tentang cara mencegah ini. Saya ingin viewcontroller utama saya menjadi satu warna dan yang lainnya.
user3163404

1
Saya pikir Anda juga harus mengatur warna di controller tampilan baru Anda.
Niko Klausnitzer

13

Untuk melakukan pekerjaan ini di storyboard (Interface Builder Inspector)

Dengan bantuan IBDesignable, kami dapat menambahkan lebih banyak opsi ke Interface Builder Inspector untuk UINavigationControllerdan men-tweak mereka di storyboard. Pertama, tambahkan kode berikut ke proyek Anda.

@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
        }
    }
}

Kemudian cukup atur atribut untuk UINavigationController di storyboard.

masukkan deskripsi gambar di sini


7

Jika Anda ingin mengatur warna warna dan warna bilah untuk seluruh aplikasi, kode berikut dapat ditambahkan ke AppDelegate.swift in

 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
`

Navigasi barTintColor dan tintColor diatur


6

Diperbarui dengan cepat 4

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

6

Di Swift5 dan Xcode 10

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

Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
31piy

4

Jawaban versi Swift 4.2 dari Albert-

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]

Saya sangat suka bagaimana Anda menambahkan jawaban ini. .barTintColor bukan pilihan sekarang. Apakah maksud Anda .backgroundColor?
Ben

4

Mengatur warna teks judul bilah navigasi menjadi putih di Swift versi 4.2:

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

3

Cepat 4

override func viewDidLoad() {
    super.viewDidLoad()

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

3

Cepat 4.1

Tambahkan func ke viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Dalam setup()fungsi tersebut tambahkan:

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

Untuk warna kustom hingga , TitleTextdi NavigationBarsini kode sederhana dan pendek untuk Swift 3:

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

atau

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

1

dalam Swift 4.2

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

1

Swift up melalui Swift 3.2 (not Swift 4.0)

    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

Dalam Swift 3 ini berfungsi:

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

0

Cepat 5.1

Hanya salin dan Tempel di ViewDidLoad()dan Ubah ukurannya dan sesuai kebutuhan Anda. Sebelum menyalin dan menempel, tambahkan Bilah Navigasi di bagian atas Layar.

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

Jika tidak berhasil maka Anda dapat mencoba hanya mengubah warna teksnya

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.