Ubah warna tombol Kembali di bilah navigasi

194

Saya mencoba mengubah warna tombol Pengaturan menjadi putih, tetapi tidak bisa mengubahnya.

Saya sudah mencoba keduanya:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

tapi tidak ada perubahan, masih terlihat seperti ini:

masukkan deskripsi gambar di sini

Bagaimana cara membuat tombol itu putih?

Brandon Evans
sumber

Jawaban:

284

Anda dapat mengubah warna warna global di storyboard Anda dengan mengklik pada ruang kosong di papan dan pilih di toolbar kanan "Tampilkan inspektur file", dan Anda akan melihat di bawah toolbar pilihan "Global Tint" pilihan.

Opsi Global Tint di storyboard

Etgar
sumber
7
woah .. Nice find !. Anda tahu bagaimana melakukan ini secara terprogram?
Paul Lehn
10
Great ditemukan, tetapi mengubah warna global menjadi putih (per pertanyaan awal) juga akan mengubah hal-hal seperti indikator pengungkapan detail tampilan tabel menjadi putih, yang akan membuatnya tidak terlihat dalam tabel yang dimaksud.
Mike Fischer
1
Menambahkan ke masalah Mike: kontrol ini juga membuat semua tombol teks Anda warna ini dan jadi Anda harus mengaturnya ke warna dengan tangan (yaitu tidak ada warna default jelas) atau hanya menggunakan metode yang berbeda.
Sirene
4
Meskipun ini adalah perbaikan cepat dan mudah, itu mengarah ke masalah lain jika warnanya putih / cocok dengan latar belakang. Jika Anda memiliki bidang teks, itu membuat kursor tidak terlihat, yang membuatnya tampak bagi pengguna seolah-olah mereka tidak dapat menulis pada bidang teks karena kursor tidak terlihat.
Jose Ramirez
5
@ PaulLehn Untuk melakukan ini secara terprogram, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)Anda dapat menulis:self.window!.tintColor = .yourColor
mmika1000
206

Kode ini mengubah warna panah

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Jika ini tidak berhasil, gunakan kode di bawah ini:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notes

UIColor.whiteColor() dan yang serupa telah disederhanakan UIColor.white

Selain itu, banyak opsional yang sebelumnya implisit telah diubah menjadi eksplisit, jadi Anda mungkin perlu:

self.navigationController?.navigationBar =
Chamath Jeevan
sumber
7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()bekerja untuk saya (Swift 2.2)
Mike Fischer
self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () bekerja untuk saya (Swift 3)
Ajay.km
Bisakah Anda menjelaskan mengapa menggunakan UIBarStyle.Black?
mmika1000
Harap perbarui: self.navigationController? .NavigationBar.tintColor =
mohonish
1
itu hanya mengubah panah, teks kembali masih tetap sama di Xcode 11
jeff ayan
93

Sangat mudah dipasang di storyboard:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

AlessandroDP
sumber
Sempurna, Terima kasih :)
Naresh Reddy M
56

Anda harus menggunakan ini:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Tiep Vu Van
sumber
Ini membuat tombol putih, tetapi membuat warna latar belakang lebih terang. Apakah Anda tahu cara memberi warna latar belakang bilah lagi penuh?
Brandon Evans
Ini jawaban yang benar. Ini akan membuat bilah ungu, dengan mengatur barTintColor dan tombol judul / bilah putih.
zirinisp
36

Cepat

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }
Deepak Tagadiya
sumber
1
Gunakan dalam cepat 3.
Deepak Tagadiya
juga beri tahu saya versi cepat mana yang dapat Anda gunakan?
Deepak Tagadiya
Dan kelas / file / vc mana yang menulis kode ini dalam proyek?
Deepak Tagadiya
Di awal fungsi setCloseButton () yang dipanggil pada viewWillAppear.
Jayprakash Dubey
tulis dalam file NextViewController.swift, juga tulis di viewDidLoad ().
Deepak Tagadiya
20

Anda bisa menggunakan seperti ini. Tempatkan di dalam AppDelegate.swift.

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

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }
Mohammad Nurdin
sumber
20

Cepat 4.2

Ubah tema aplikasi lengkap

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Ubah pengontrol spesifik

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)
AiOsN
sumber
itu mengubah warna untuk semua aplikasi. Bagaimana jika saya perlu mengubahnya untuk layar tertentu / khusus UINavigationController?
Vyachaslav Gerchicov
@VyachaslavGerchicov jawaban di atas adalah untuk tema aplikasi lengkap, jika Anda ingin mengubah pengontrol tertentu. Lakukan sesuatu seperti ini: biarkan navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN
Jika Anda menggunakan iOS 13 Anda tidak menggunakan didFinishLaunchingWithOptions lagi, itu telah dipindahkan ke SceneDelegate.
JBarros35
15

Di Swift3 , Untuk mengatur tombol Kembali ke red.

self.navigationController?.navigationBar.tintColor = UIColor.red
Vincent
sumber
ini akan mengatur bilah navigasi, bukan item tombol bilah
carlodonz
1
Ya, itu pertanyaannya.
Vincent
"Ubah warna tombol Kembali di bilah navigasi"
carlodonz
Ini adalah satu-satunya metode yang bekerja untuk saya. Sesuatu sepertinya rusak dengan implementasi Apple sekarang ...
Dave Y
13

Di Swift 4, Anda bisa mengatasi masalah ini menggunakan:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black
Darrell Richards
sumber
8

Cepat 3

Jawaban yang paling banyak dipilih tidak tepat untuk Swift 3.

masukkan deskripsi gambar di sini

Kode yang benar untuk mengubah warna adalah:

self.navigationController?.navigationBar.tintColor = UIColor.white

Jika Anda ingin mengubah warna, ubah UIColor. Putih di atas ke warna yang diinginkan

Elon R.
sumber
Ini adalah satu-satunya metode yang bekerja untuk saya. Sesuatu sepertinya rusak dengan implementasi Apple sekarang ...
Dave Y
7

Semua jawaban yang UINavigationBar.appearance().tintColorbertentangan dengan dokumentasi Apple di UIAppearance.h.

Catatan untuk iOS7: Di iOS7 tintColorproperti telah pindah ke UIView, dan sekarang memiliki perilaku warisan yang dijelaskan dalam UIView.h. Perilaku yang diwariskan ini dapat bertentangan dengan proksi penampilan, dan karenanya tintColorsekarang tidak diizinkan dengan proksi penampilan.

Di Xcode, Anda perlu mengklik perintah pada setiap properti yang ingin Anda gunakan dengan proxy penampilan untuk memeriksa file header dan memastikan properti tersebut dijelaskan UI_APPEARANCE_SELECTOR.

Jadi cara yang benar untuk mewarnai bilah navigasi ungu dan judul dan tombol putih di seluruh aplikasi melalui proksi penampilan adalah:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

Perhatikan bahwa UIBarButtonItemini bukan subkelas UIViewmelainkan NSObject. Jadi yang tintColorproperti tidak mewarisi tintColordari UIView.

Sayangnya, UIBarButtonItem.tintColortidak dijelaskan dengan UI_APPEARANCE_SELECTOR- tetapi menurut saya bug dokumentasi. Tanggapan dari Apple Engineering dalam radar ini menyatakan itu didukung.

Jamie McDaniel
sumber
UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // juga
Guilherme
6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Cuplikan ini melakukan keajaiban. Alih-alih redColor, ubahlah sesuai keinginan Anda.

Suresh Kumar Durairaj
sumber
6

Gunakan kode ini di AppDelegatekelas, di dalam didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}
M. Nadeeshan
sumber
4

Mari kita coba kode ini:

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

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}
Mannam Brahmam
sumber
Terima kasih banyak, tuan
Arpit B Parekh
4

dalam penggunaan cepat 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Riccardo Caroli
sumber
4

Jika Anda sudah memiliki tombol kembali di pengontrol tampilan "Pengaturan" dan Anda ingin mengubah warna tombol kembali pada pengontrol tampilan "Informasi Pembayaran" menjadi sesuatu yang lain, Anda dapat melakukannya di dalam pengaturan "Pengaturan" lihat pengontrol tampilan untuk segue seperti ini :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}
Despotovic
sumber
3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Ini berfungsi untuk saya, iOS 9.0+

yuchen
sumber
2

Tambahkan kode berikut ke fungsi didFinishLaunchingWithOptions di AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]
Jayprakash Dubey
sumber
Kode ini memberi saya kesalahan berikut: "Penggunaan pengidentifikasi yang belum terselesaikan 'uicolorFromHex'" Adakah yang bisa membantu saya menyelesaikannya?
jonathan3087
mungkin ekstensi untuk UIColor. Anda dapat mencari stackoverflow cara membuat ekstensi.
KvdLingen
2

Untuk Swift 2.0, Untuk mengubah warna warna Navigasi-bar , teks judul dan warna belakang tombol berubah dengan menggunakan yang berikut ini di AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}
yazh
sumber
2

Tidak yakin mengapa tidak ada yang menyebutkan ini ... tapi saya melakukan persis apa yang Anda lakukan di viewDidLoad... dan itu tidak berhasil. Lalu saya menempatkan kode saya keviewWillAppear dan semuanya bekerja.

Solusi di atas adalah mengubah barbuttonItem tunggal . Jika Anda ingin mengubah warna untuk setiap navigasiBar dalam kode Anda, ikuti jawaban ini .

Pada dasarnya mengubah ke kelas itu sendiri menggunakan appearance()seperti membuat perubahan global pada semua contoh tampilan itu di aplikasi Anda. Untuk lebih lanjut lihat di sini

Madu
sumber
1

Anda punya satu pilihan untuk menyembunyikan tombol kembali dan membuatnya dengan diri Anda sendiri. Kemudian atur warnanya.

Saya melakukan itu:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()
Muhammad Ahmed Baig
sumber
1
Pertanyaannya secara khusus seputar penataan item navigasi kiri dan ini adalah yang terdekat dengan menjawab pertanyaan secara langsung.
kerajinan
0

Ini akan diselesaikan dengan baris ini di - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
Ertaky
sumber
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro
0

Anda harus menambahkan baris ini

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black
Monir Khlaf
sumber
0

Saya lebih suka NavigationController khusus daripada mengatur ui global, atau memasukkan ViewController.

Ini solusinya


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

Anda juga tidak perlu repot - repot dengan Apple Api seperti EKEventEditViewController , PickerViewController dan sebagainya jika Anda menggunakan pengaturan global sepertiUIBarButtonItem.appearance().tintColor = .white

tylerlantern
sumber
0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
Vaibhav Gaikwad
sumber