iOS 7 UIBarDüğmesi geri düğmesi ok rengi


172

Geri düğmesi okunu değiştirmeye çalışıyorum

resim açıklamasını buraya girin

Şu anda metin boyutunu ve arka düğmedeki metin rengini kontrol etmek için aşağıdakileri kullanıyorum:

[[UIBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], UITextAttributeTextColor,
    [UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
    [UIColor darkGrayColor], UITextAttributeTextShadowColor,
    [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
  nil] forState:UIControlStateNormal];

ancak geri düğmesi için yalnızca okun rengini değiştirmek istersem ne yapmalıyım?


Geri düğmesinin ok rengini değiştirmek için herhangi bir çözüm buldunuz mu?
OnkarK

1
@OMK NavBarColor'u infolistproperty ile değiştirdim ve işe yaraması için gerçek navbar rengini farklı bir renge ayarladım. Neler olup bittiğinden emin değilim, ama bu çözüm benim için çalıştı
kevinl

1
Özelliklerine bazı Davranış UINavigationBarbir göz atın iOS 7'de değiştiğini Yanıt diğer bazı etkisini görmek için Özellikler de.
Bhavin

lütfen bu sorunla ilgili yardım edin: stackoverflow.com/questions/29923813/…
MIloš Kresović

Yanıtlar:


438

Belirli bir gezinme denetleyicisinin * geri düğmesi chevron rengini değiştirmek için:

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

* 1'den fazla gezinme denetleyicisine sahip bir uygulama kullanıyorsanız ve bu chevron renginin her birine uygulanmasını istiyorsanız, her gezinme denetleyicisi için geri düğmesi chevronunu aşağıdaki gibi ayarlamak için görünüm proxy'sini kullanmak isteyebilirsiniz:

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

Ve iyi bir ölçü için, hızlı bir şekilde (yorumlardaki Jay Mayu'ya teşekkürler):

UINavigationBar.appearance().tintColor = UIColor.whiteColor()

3
Bu, yalnızca tüm uygulamanız için aynı gezinme denetleyicisini kullanıyorsanız tüm uygulama için geçerlidir. Aslında Bart'ın önerisini öneririm.
Kyle Clegg

1
Cevabımı birden fazla gezinme denetleyicisi hakkında bir notla güncelledim. Yine de Bart'ın önerisinin "doğru" cevap olduğu konusunda hemfikir değilim, çünkü tüm uygulamanın renk tonunu ayarladığınızda başka birçok yan etki vardır. Ayrıca, orijinal soru tüm uygulamayı nasıl temalayacağını sormadı, sadece geri düğmesini nasıl tema alacağını soruyordu.
DiscDev

1
Bu, arka şivronun rengini ayarlamıyor gibi görünüyor.
jcampbell1

2
@ jcampbell1 - Bunu birkaç uygulamamda başarıyla kullanıyorum ... belki de birden fazla UINavigationController hakkındaki uyarıyı okumadınız.
DiscDev

7
hızlıUINavigationBar.appearance().tintColor = UIColor.whiteColor()
Jay Mayu

57

Tüm uygulamanın tintColor değerini ayarlamanız gerekir.

self.window.tintColor = [UIColor redColor];

Veya Swift 3'te:

self.window?.tintColor = UIColor.blue

Kaynak: iOS 7 UI Geçiş Kılavuzu


4
Orijinal soruda belirtildiği gibi, yalnızca geri düğmesi şivronunun (ve tüm uygulamanın değil) rengini ayarlamak istiyorsanız, bu yanlış cevaptır. Doğru cevap için cevabımı burada bulabilirsiniz: stackoverflow.com/a/18809412/1103584
DiscDev

Bunu, uygulama düğmelerimde geri düğmelerimi siyah olarak değiştirmek için kullandım. ApplicationDidFinishLaunchingWithOptions yöntemine yerleştirin ... window.tintColor = [UIColor blackColor];
Marc Watson

Bu iOS 6'da çalışamaz. Birisi ne yapacağını biliyor mu?
Gavjr

1
Bu, uygulamanın (paylaşım için) ve MFMailComposeViewController'ı (e-posta göndermek için) içeren tüm uygulamanın tintColor'unu etkilemesine neden oldu. Bu iletişim kutuları, tintColor öğesinin .... ile değiştirilmediğini varsayar ve bazı çirkin renk etkileşimlerine neden olabilir.
Mike Lambert

Bu, yanıp sönen imleç gibi diğer birçok nesnenin renk tonunu değiştirir UITextField. Kesinlikle tavsiye edilmez.
Hunter Monk

55

Yöntemi kullanarak uygulamanın tüm gezinme çubuğunun rengini ayarlayabilirsiniz

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

23

Bu şekilde yalnızca ok rengini değiştirmek (düğme başlığının rengini değil) mümkündür:

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

Gezinme çubuğu, oku temsil eden _UINavigationBarBackIndicatorView türünün (alt görünümler dizisindeki son öğe) alt görünümünü içerir.

Sonuç, geri düğmesi okunun ve geri düğmesi başlığının farklı renklerine sahip gezinme çubuğu


4
Sistem görünümlerinin alt görünümlerinin sırasına bağlı olarak kötü bir fikirdir.
Glenn Maynard

2
self.navigationController.navigationBar.tintColor ayarlandığında çalışmadı.
Zengin Tilki

@GlennMaynard Haklısınız - bunu uygulamanın en iyi yolu self.navigationController.navigationBar.subviews, geri düğmesi bulunana kadar döndürülen alt görünüm dizisini yinelemektir .
Evan R

@EvanR selmad'ın çözümü benim için çalışırken, alt dizi aracılığıyla tekrarlamak işe yaramadı (ki ilk önce denedim çünkü bunu yapmanın akıllıca olacağına katılıyorum). İşinize yarıyorsa, lütfen bir örnek ekleyin. Teşekkürler.
jungledev

22

Film şeridi kullanıyorsanız, gezinme çubuğu renk tonunu ayarlayabilirsiniz.

resim açıklamasını buraya girin

resim açıklamasını buraya girin


Tam aradığım şey. Teşekkür ederim!
Chad Lewis

11

NavigationController öğesini başlatan rootViewController içinde, bu kodu viewDidAppear yönteminin içine koydum:

//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

2
UITextAttributeTextColor, iOS 7'de kullanımdan kaldırıldı
NSForegroundColorAttributeName

7

İOS 6'da, tintColor gezinme çubuklarının, sekme çubuklarının, araç çubuklarının, arama çubuklarının ve kapsam çubuklarının arka planını renklendirdi. İOS 7'de bir çubuk arka planını renklendirmek için bunun yerine barTintColor özelliğini kullanın.

iOS 7 Tasarım Kaynakları iOS 7 UI Geçiş Kılavuzu


2
İşte bu o! ... uygulama temsilcisine koy. Tıkır tıkır çalışıyor! window.tintColor = [UIColor blackColor]; // Siyah istedim
Marc Watson

6

tintColorÖzelliği düğme (veya çubuk düğmesi öğesi) veya görünüm denetleyicisinin görünümünde ayarlayabilirsiniz . Varsayılan olarak, özellik, renk tonunu üst görünümden UIWindowuygulamanızın en üst düzeyine kadar devralır .


1
cevap için teşekkürler. Ancak, iOS 7'de biraz farklı çalışıyor. Eski kodum tintColor kullanıyordu, ancak iOS 7 o kadar hoşuna gitmiyor. Bazı UI sorunlarını gidermek için resmi Apple Dev iOS 7 geçiş kılavuzunu kullandım
kevinl

Bunun nasıl yapılacağına dair ayrı bir örnek için cevabımı görün: stackoverflow.com/a/18809412/1103584
DiscDev

5

Her ikisini de kullanmak zorunda kaldım:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
                     setTitleTextAttributes:[NSDictionary 
               dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] 
                                   forState:UIControlStateNormal];

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];

Ve benim için çalışıyor, herkese teşekkürler!


5
UINavigationBar *nbar = self.navigationController.navigationBar;

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
   //iOS 7
   nbar.barTintColor = [UIColor blueColor]; // bar color
   //or custom color 
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

   nbar.navigationBar.translucent = NO;

   nbar.tintColor = [UIColor blueColor]; //bar button item color

} else {
   //ios 4,5,6
   nbar.tintColor = [UIColor whiteColor];
   //or custom color
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

}

Harika. Bana yardımcı oldu. Teşekkürler
Yogesh Lolusare

4

Swift 3'ü Güncelle

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

Sonuç: resim açıklamasını buraya girin


3

Sadece NavigationBarrengi değiştirmek için renk tonunu aşağıdaki gibi ayarlayabilirsiniz.

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

Bu, iOS 7'deki renk tonunu etkilemez. Dokümanlara göre: "tintColor özelliğini görünüm proxy API'larını kullanarak ayarlama iOS 7'de desteklenmiyor." bağlantı
bachonk

3

Ok görüntüsü ile UIButton'a dayalı özel geri düğmesi yapıyorsanız, alt sınıf snippet'i. Bunu kullanarak kodda düğme oluşturabilir veya herhangi bir UIButton'a sadece Interface Builder'da sınıf atayabilirsiniz. Geri Ok Görüntü otomatik olarak eklenecek ve metin rengiyle renklendirilecektir.

@interface UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color;

@end


@implementation UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.0f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = self.scale;
        UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(self.size);
    }

    [self drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

@end




#import "iOS7backButton.h"

@implementation iOS7BackButton

-(void)awakeFromNib
{
    [super awakeFromNib];

    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
    [self setImage:backBtnImage forState:UIControlStateNormal];
    [self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
    [self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];


}


+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
    [backBtn setImage:backBtnImage forState:UIControlStateNormal];
    [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
    [backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
    [backBtn setTitle:btnTitle forState:UIControlStateNormal];
    [backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];

    return backBtn;
}

@end

geri düğmesi resmi @ 2x


3

Tüm uygulamada yalnızca Geri Ok AMA'nı değiştirmek istiyorsanız, bunu yapın:

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] 
  setTintColor:[UIColor colorWithHexString: @"#f00000"]];

Bu, uygulama mağazasından reddedilmeniz için bir şans var
Luke

@ Luke, birkaç kez başarıyla kullandım. Reddetme yok. Ama evet, şans hala var.
orkenstein

Gelecekteki iOS sürümünde hala kırılacak
Lope

1
@Lope, evet, neden olmasın. Gümüş mermi aramıyorum.
orkenstein

İOS 10.1'deki alt görünümlerde yineleme, bunun hala sınıf adı olduğunu gösteriyor, ancak görünüşünü burada gösterildiği gibi ayarlamanın benim için bir etkisi yok.
arlomedia

2

İOS 7'de, kod içeriden aşağıdaki satırı koyabilirsiniz application:didFinishLaunchingWithOptions:sizin de AppDelegate.mdosyaya:

[[UINavigationBar appearance] setTintColor:myColor];

myColorGeri düğmesinin tüm uygulama boyunca olmasını istediğiniz rengi ayarlayın . Her dosyaya koymaya gerek yok.


0

Swift 2.0: Boyama Gezinme Çubuğu ve düğmeleri

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

0

Hızlı 3'te, UIBarButton geri düğmesi ok rengini değiştirmek için

self.navigationController?.navigationBar.tintColor = UIColor.black
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.