Bagaimana cara mengubah warna Bilah Navigasi di iOS 7?

213

Bagaimana cara mengubah warna Bilah Navigasi di iOS 7?

Pada dasarnya saya ingin mencapai sesuatu seperti Twitter Nav Bar (Twitter yang diperbarui untuk iOS7itu). Saya tertanam-dalam bilah nav di atas a view controller. Yang saya inginkan adalah mengubah warna bilah nav menjadi biru muda bersama dengan bilah utilitas di bagian atas. Saya tidak dapat menemukan opsi di blog saya storyboard.

Patricio Guerra
sumber
[[Penampilan UINavigationBar] setBarTintColor: [UIColor blackColor]]; ini akan bekerja mulai dari ios 7 dan seterusnya
Chandramani
1
ikuti tutorial ini appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

Jawaban:

319

Perilaku tintColoruntuk bilah telah berubah di iOS 7.0. Tidak lagi memengaruhi latar belakang bilah.

Dari dokumentasi:

Referensi Kelas barTintColor

Warna rona untuk diterapkan pada latar belakang bilah navigasi.

@property(nonatomic, retain) UIColor *barTintColor

Diskusi
Warna ini dibuat transparan secara default kecuali jika Anda menyetel properti transparan ke NO.

Ketersediaan

Tersedia di iOS 7.0 dan yang lebih baru.

Dinyatakan dalam
UINavigationBar.h

Kode

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Kami juga dapat menggunakan ini untuk memeriksa Versi iOS sebagaimana disebutkan dalam Panduan Transisi UI iOS 7

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDIT Menggunakan xib

masukkan deskripsi gambar di sini

Rajneesh071
sumber
3
tetapi di mana saya dapat menempatkan kode ini ?? Saya sangat baru di hahah ini. Saya menempatkannya di dalam delegasi aplikasi dan sepertinya tidak banyak membantu. Itu membangun dengan baik saja.
Patricio Guerra
1
inside viewController
Rajneesh071
1
Saya akan meletakkannya di viewDidLoad di viewController Anda.
HalR
2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Ini akan lebih baik untuk menguji versi iOS yang Anda jalankan, seperti yang dinyatakan oleh apel dalam panduan transisi: developer.apple.com/library/ios/documentation/userexperience/…
David Thompson
1
Anda juga dapat menggunakan if ([self.navigationController.navigationBar responseToSelector: @selector (setBarTintColor :)]) vs nomor versi untuk memeriksa apakah Anda dapat mengatur barTintColor
SimpsOff
129

Melakukan apa yang diajukan pertanyaan asli — untuk mendapatkan tampilan Nav Bar Twitter lama, latar belakang biru dengan teks putih — sangat mudah dilakukan hanya dengan menggunakan Interface Builder di Xcode.

  • Menggunakan Outline Dokumen, pilih Bilah Navigasi Anda.
  • Di Inspektur Atribut, di grup Bilah Navigasi, ubah Gaya dari Default ke Hitam. Ini mengubah warna latar belakang bilah Navigasi dan Status menjadi hitam, dan teksnya menjadi putih. Jadi baterai dan ikon serta teks lainnya di bilah status akan terlihat putih saat aplikasi sedang berjalan.
  • Di grup Navigation Bar yang sama, ubah Tint Bar ke warna yang Anda sukai.
  • Jika Anda memiliki item Tombol Bar di Bar Navigasi Anda, mereka akan tetap menampilkan teks mereka dalam warna biru default, jadi di Inspektur Atribut, grup Lihat, ubah Tint menjadi Warna Putih.

Itu akan membuat Anda mendapatkan apa yang Anda inginkan. Berikut adalah tangkapan layar yang akan membuatnya lebih mudah untuk melihat di mana membuat perubahan.

Di mana harus melakukan perubahan yang diperlukan, termasuk hasilnya di iOS Simulator

Perhatikan bahwa mengubah hanya Bilah Warna tidak mengubah warna teks di Bilah Navigasi atau Bilah Status. Gaya juga perlu diubah.

alondono
sumber
Memilih hitam untuk iOS 9 sudah usang, setiap peluang jawaban yang diperbarui
Rob85
@ Rob85 Saya tidak berada di depan Xcode sekarang, tetapi ketika Xcode 7 (dengan iOS 9) dirilis, saya memverifikasi bahwa instruksi ini masih terkini. Pastikan bahwa Bilah Navigasi dipilih, gaya hitam harus di inspektur atribut Bilah Navigasi.
alondono
2
@ Rob85 Saya telah memeriksa situs web Pengembang Apple, dan gaya Defaultdan Blackmasih tersedia di iOS 9. Yang sudah usang adalah BlackOpaquedan BlackTranslucent, yang digantikan oleh kombinasi Blackgaya dan kotak centang Translucent. UIBarStyle di situs web pengembang Apple
alondono
Maaf @alondono Anda benar sekali, saya mengklik bilah navigasi di Navigasi Kontroler tidak dalam garis besar dokumen itulah sebabnya saya tidak bisa melihatnya. Warna hitam yang saya anggap usang ada di bilah status metrik-> yang disimulasikan. Terima kasih atas balasan Anda
Rob85
@ Rob85 Keren! Terima kasih telah memberi tahu saya.
alondono
76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color
pNre
sumber
4
Dan di mana tepatnya saya bisa meletakkan kode ini ?? Maaf untuk pertanyaan pemula di sana hahah
Patricio Guerra
1
kode dapat ditempatkan di - (void) metode viewDidLoad pengendali navigasi
pNre
2
Di iOS 9, mengatur barTintColor ke hitam akan membuat waktu, nama perangkat, dan baterai terlalu hitam sehingga Anda tidak dapat melihatnya. Untuk menghindari ini, alih-alih menggunakan barTintColor, gunakan self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff
46

Di aplikasi berbasis Navigasi, Anda dapat memasukkan kode di AppDelegate. Kode yang lebih rinci dapat berupa:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
RFG
sumber
6
tambahkan [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];untuk iOS 7
Samin
24

Di viewDidLoad, atur:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Ubah ( blueColor) ke warna apa pun yang Anda suka.

zeezoo
sumber
18

Untuk perubahan cepat warna bilah navigasi:

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

ganti font judul, ukuran, warna:

self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedString.Key.foregroundColor : UIColor.white,
        NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
    ]
William Hu
sumber
14

Di iOS 7 Anda harus menggunakan properti -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];
RFG
sumber
13

Jika Anda ingin menggunakan kode hex, berikut adalah cara terbaik untuk melakukannya.

Pertama, tentukan ini di bagian atas kelas Anda:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Kemudian di dalam "aplikasi didFinishLaunchingWithOptions", masukkan ini:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Memberi Anda kode hex menggantikan 00b0f0.

Kyle Greenlaw
sumber
1
[Penampilan UINavigationBar] sangat membantu.
Ken
11

Jika Anda perlu mendukung ios6 dan ios7 maka Anda mendapatkan warna biru muda menggunakan ini di UIViewController Anda :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}
bbaassssiiee
sumber
3
Di iOS 7: -self.navigationController.navigationBar.barTintColor adalah warna bar DAN -self.navigationController.navigationBar.tintColor adalah tombol warna teks (kembali, selesai ...).
IgniteCoders
10

Ini sebenarnya lebih mudah daripada jawaban yang saya lihat di sini:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Saya harap ini membantu seseorang. Saya tidak suka jawaban yang saya lihat. Saya suka menjaga kode saya sebersih mungkin. Tidak mengatakan bahwa itu salah untuk melakukannya secara terprogram, tetapi ada orang di luar sana seperti saya .... ini untuk kalian. Mengubah warna bilah navigasi

pqsk
sumber
Terima kasih, saya telah berubah bulan ini saat bermain-main dan tidak tahu bagaimana cara mengubahnya kembali!
Simetris
Tidak masalah, senang saya bisa membantu seseorang
pqsk
Saya pikir ini adalah jawaban yang paling lurus ke depan! Thx
Ispas Claudiu
Tidak masalah. Senang itu masih membantu
pqsk
5

Untuk melengkapi kode Rajneesh071, Anda mungkin juga ingin mengatur warna judul bilah navigasi (dan font, jika Anda mau) karena perilaku default berubah dari iOS 6 menjadi 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
CodeBrew
sumber
5

Tambahkan hanya kode ini di Anda ViewContorller atau di AndaAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
Darshan Kunjadiya
sumber
4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}
Dashony
sumber
4

Dalam aplikasi berbasis navigasi Anda dapat mengubah warna

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
MaxEcho
sumber
1
Mengubah properti tintColor di iOS7 tidak lagi memiliki efek mengubah warna latar bar. Warna warna di iOS7 hanya mempengaruhi warna teks dari BarButtonItems dll.
Pascal Bayer
4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }
Mubin Shaikh
sumber
3

Pertanyaan ini dan jawaban ini sangat membantu. Dengan mereka saya dapat mengatur navigationBarwarna biru tua yang saya inginkan dengan judul putih dan teks tombol.

Tapi saya juga perlu mengubah jam, carrier, kekuatan sinyal, dll menjadi putih. Hitam tidak cukup kontras dengan biru tua.

Saya mungkin telah diabaikan solusi yang di salah satu jawaban sebelumnya, tapi saya bisa melakukan perubahan itu dengan menambahkan baris ini ke tingkat atas saya viewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
John
sumber
UIStatusBarStyleLightContentberfungsi, tetapi tampaknya enum yang tepat setBarStyle:adalahUIBarStyleBlack
Collin Allen
3
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Gaurav Gilani
sumber
3

Untuk Warna:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Untuk Gambar

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];

sumber