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?

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


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 =

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


56

Anda harus menggunakan ini:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

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
 }

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
    }

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)

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

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

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


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.


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.


6

Gunakan kode ini di AppDelegatekelas, di dalam didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}

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
}

Terima kasih banyak, tuan
Arpit B Parekh

4

dalam penggunaan cepat 2.0

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

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

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Ini berfungsi untuk saya, iOS 9.0+


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()]

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
}

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


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()

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;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro

0

Anda harus menambahkan baris ini

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

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


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