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

AG1
sumber

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

Albert Vila Calvo
sumber
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

AG1
sumber
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.

Alex
sumber
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]
Bunga
sumber
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
Niko Klausnitzer
sumber
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

Fangming
sumber
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

VirajP
sumber
6

Diperbarui dengan cepat 4

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

Di Swift5 dan Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
sumber
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]
Abhishek Jain
sumber
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]
Rawand Saeed
sumber
3

Cepat 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}
Vladimir
sumber
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
    }
Patrick.Bellot
sumber
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]
ifredy3
sumber
1

dalam Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Imtee
sumber
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
seperti bubbaspike
sumber
0

Dalam Swift 3 ini berfungsi:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
srinivasan
sumber
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]
Raksha.
sumber