AppDelegate'ten UINavigationBar arka plan rengi nasıl değiştirilir


91

UINavigationBarYaparak arka plan resmini nasıl değiştireceğimi biliyorum

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

ve ben her içindeki farklı renklere çıtayı bilen ViewsŞimdi arka plan rengini değiştirmek istiyorum ..... bir görüntü kullanmadan bir katı renk app delegate. Her görünümden her seferinde ayarlamak istemiyorum ve a yazmak istemiyorum CGRect.

Denedim [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];ama çalışmıyorum ve uygulama temsilcisinde çalışan hiçbir yerde bir kod bulamıyorum.

Lütfen biri beni doğru yönü gösterebilir mi?

Yanıtlar:


203

Kullanabilirsiniz [[UINavigationBar appearance] setTintColor:myColor];

İOS 7'den beri [[UINavigationBar appearance] setBarTintColor:myColor];ve ayrıca ayarlamanız gerekiyor [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Teşekkürler, düz bir renk yapmak için üstten gelen varsayılan beyaz renk geçişini nasıl kaldıracağınızı biliyor musunuz?
Jonathan Thurft

1
tintColorGradyan ile kalacaktır. Bu degradeye sahip olmak istemiyorsanız, görünüm için bir UIImage oluşturmak için UINavigationBar VEYA alt sınıflara ayırmanız gerekir.
Seb Thiebaud

59
çalışmayan iOS 7'de kullanmak zorunda kaldımnavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentözellik iOS 6 ve iOS 7'de UIAppearance kullanılarak ayarlanamaz. Bu nedenle [[UINavigationBar appearance] setTranslucent:NO], uygulama NSInvalidArgumentExceptionhata vererek kilitlenir . [self.navigationController.navigationBar setTranslucent:NO]IB'yi kullanarak şeffaflık kullanın veya seçimi kaldırın.
Sam

1
Swift Versiyon: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

Renk tonunu değil arka plan rengini değiştirmek için aşağıdaki kod parçası çalışacaktır:

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

3
Bu kabul edilen cevap olmalı, iOS7 için mükemmel çalışıyor.
joshuahornby10

İOS 7 için doğru cevap. Benim için çalışıyor.
LondonGuy

Yarı saydamlık, bunun işe yaraması için şarttır. Kabul edilen cevap bunu içermediğinden, kabul edilen cevap bu olmalıdır.
Tristan Warner-Smith

3
Sadece açıklığa kavuşturmak için, kabul edilen cevap AppDelegate içindir ve bu da View Controller içindedir.
Dekan

@Dean haklı. Kabul edilen cevap, yeni oluşturulanlar için geçerli UIViewControllersolurken, bu cevap her çağrıldığında etkileri gösterecektir.
aramusss

19

Bunu iOS 7'de yapmak için:

[[UINavigationBar appearance] setBarTintColor:myColor];

15

Swift sözdizimi:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Bunu sadece AppDelegate didFinishLaunchingWithOptions'a ekledim ve uygulama boyunca devam ediyor


8

Swift :

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

6

Bunu Xcode 6.3.1 ile kolayca yapabilirsiniz. Belge ana hatlarında Gezinti Çubuğunuzu seçin. Nitelik Denetçisi'ni seçin. Yarı Saydam seçeneğinin işaretini kaldırın. Çubuk Tonu'nu istediğiniz renge ayarlayın. Bitti!


Teşekkürler, ObjC'de ve hızlı bir şekilde bunun nasıl yapılacağına dair birçok referans buldum, ancak IB'de mevcut olduğundan bahsetmeyen kimse
Nick

3

Diğer cevapların da belirttiği gibi kullanabilirsiniz setTintColor:, ancak tek bir renk istiyorsunuz ve bu AFAIK ton rengini ayarlamak mümkün değil.

Çözüm, program aracılığıyla bir görüntü oluşturmak ve bu görüntüyü aracılığıyla tüm gezinme çubukları için arka plan görüntüsü olarak ayarlamaktır UIAppearance. Görüntünün boyutu hakkında, 1x1 piksel görüntünün işe yarayıp yaramayacağından emin değilim veya gezinme çubuğunun tam boyutuna ihtiyacınız olup olmadığından emin değilim.Görüntüyü nasıl oluşturacağınızı görmek için bu sorunun ikinci cevabını kontrol edin .

Bir tavsiye olarak, uygulama temsilcisini bu tür şeylerle "aşırı yüklemeyi" sevmiyorum. Yapmaya eğilimli olduğum şey, istediğim tüm UIAppearance öğelerini ayarladığım AppearanceConfigurationtek bir genel yöntemle adlandırılmış bir sınıf oluşturmak configureAppearanceve sonra bu yöntemi uygulama temsilcisinden çağırmaktır.


2

Herhangi bir görünüm denetleyicisinde bu kodu kullanarak UINavigation Arkaplan rengini ayarlayabilirsiniz.

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

Swift 4.2 ve Xcode 10.1'de

Gezinme çubuğu renginizi AppDelegate'inizden doğrudan tüm projenize değiştirebilirsiniz.

Gelen didFinishLaunchingWithOptions launchOptions:satır kod için aşağıdaki yazma

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Buraya

tintColor , geri düğmesi ve menü çizgileri resimleri vb. gibi arka plan görüntülerini ayarlamak içindir (Sol ve sağ menü görüntüsünün altına bakın)

barTintColor , gezinme çubuğu arka plan rengi içindir

Belirli bir görünüm denetleyicisi gezinme çubuğu rengini ayarlamak istiyorsanız, aşağıdaki kodu yazın viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

görüntü açıklamasını buraya girin


-1

Renk kodu burada sorun. 195/255 kullanmak yerine 0.7647 veya 195.f / 255 kullanın.f Sorun şamandırayı dönüştürmenin düzgün çalışmamasıdır. Tam kayan değer kullanmayı deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.