IOS 7 UIBarButton назад кнопка стрелка цвет


165

Я пытаюсь изменить кнопку назад стрелка

enter image description here

настоящее время я использую следующие контролировать размер шрифта, а также цвет текста на спине кнопка:

[[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]; 

, но если я хочу изменить только цвет стрелки для кнопки «Назад», что мне делать?

  0

Вы нашли какое-либо решение, чтобы изменить цвет Стрелы для кнопки возврата? 26 авг. 132013-08-26 10:51:24

+1

@OMK Я закончил тем, что изменил свой infolistproperty NavBarColor, чтобы заставить его работать, а затем установить фактический navbarcolor на другой цвет. Я не уверен, что происходит, но это решение сработало для меня 26 авг. 132013-08-26 14:58:08

+1

Поведение от некоторых свойств 'UINavigationBar' изменилось с iOS 7. Взгляните на [Ответ] (http://stackoverflow.com/ a/19029973/1603072), чтобы увидеть эффект некоторых других * Свойств *. 03 окт. 132013-10-03 14:12:34

  0

, пожалуйста, помогите с этой проблемой: http://stackoverflow.com/questions/29923813/ios-back-button-arrow-not-displayed 08 май. 152015-05-08 14:06:34

429

Чтобы изменить кнопку назад шеврона цвет для конкретного навигационного контроллера *:

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

* Если вы используете приложение с более чем 1 навигации контроллера, и вы хотите этот цвет шеврона для применения к каждому из них, вы можете использовать прокси-сервер внешнего вида для установки обратной кнопки шеврона для каждого навигационного контроллера следующим образом:

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

И для хорошей меры, в быстрых (благодаря Джей Маю в комментариях):

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

Это применимо только во всем приложении, если вы используете один и тот же контроллер навигации для своего приложения. Я действительно рекомендую предложение Барта. 25 сен. 132013-09-25 06:47:12

+1

Я обновил свой ответ с запиской о нескольких навигационных контроллерах. Я до сих пор не согласен с тем, что предложение Барта является «правильным» ответом, потому что есть множество других побочных эффектов, когда вы устанавливаете цвет оттенков всего приложения. Кроме того, в первоначальном вопросе не задавалось вопрос о том, как использовать тему для всего приложения, он только спрашивал, как использовать тему кнопки «Назад». 25 сен. 132013-09-25 19:18:33

  0

Истинная правда. Но причина, по которой мне нравится его ответ, заключается в том, что при iOS 7 тонирование всего приложения является хорошей практикой проектирования и позволяет использовать более удобный код, если вы хотите изменить этот оттенок в будущем. Его ответ не является точным решением проблемы, как ваша, но она помогает кому-то вроде меня перейти к предложенным Apple принципам. Оба являются качественными ответами. 25 сен. 132013-09-25 21:15:00

  0

Не могу договориться подробнее! 26 сен. 132013-09-26 13:08:23

+1

Это не похоже на цвет заднего шеврона. 24 янв. 142014-01-24 22:55:20

+2

@ jcampbell1 - Я использую это в нескольких моих приложениях успешно ... возможно, вы не прочитали оговорку о нескольких UINavigationControllers. 27 янв. 142014-01-27 22:17:09

  0

, если вы хотите установить это для всех контроллеров, просто используйте свойство внешнего вида;) '[Внешний вид UINavigationBar] .tintColor = ...' 24 мар. 142014-03-24 15:44:13

+7

для быстрого 'UINavigationBar.appearance(). TintColor = UIColor.whiteColor()' 28 дек. 142014-12-28 17:02:09

+1

спасибо @JayMayu - я добавлю это в ответ, чтобы он был более полным и дал вам кредит;) 30 дек. 142014-12-30 19:49:25

  0

для Swift можно написать еще более короткое UINavigationBar.appearance(). TintColor = .whiteColor() 01 апр. 152015-04-01 08:52:59

+1

также для быстрого 'UINavigationBar.appearance() .tintColor = .whiteColor() ' 05 июн. 152015-06-05 16:05:23

  0

Что вы говорите о« прокси-объекте внешнего вида », вы правильно указали эту строку кода в делете делегата? 06 ноя. 152015-11-06 10:50:20

  0

@Supertecnoboff, который определенно является хорошим местом для этого. Пока вы это делаете до отображения UINavigationController, который вы хотите изменить, он будет работать нормально. App Delegate - это одно место для этого, если вы хотите, чтобы оно применимо ко всему навигационному приложению. 06 ноя. 152015-11-06 20:14:53

  0

В iOS 11, кажется, вам нужно установить цвет оттенка на элемент кнопки панели. 'self.navigationItem.backBarButtonItem.tintColor = myColor;' 10 ноя. 172017-11-10 22:42:17


6

Вы можете установить свойство tintColor на кнопку (или элемент кнопки панели) или на вид контроллера. По умолчанию свойство наследует оттенок от родительского представления, вплоть до верхнего уровня UIWindow вашего приложения.

+1

спасибо за ответ. Тем не менее, это работает немного по-другому на iOS 7. Мой старый код использовал tintColor, но iOS 7, похоже, не очень нравится. Я закончил с помощью официального руководства по переходу Apple Dev iOS 7, чтобы исправить некоторые проблемы с пользовательским интерфейсом. 26 авг. 132013-08-26 14:59:50

  0

См. Мой ответ на дискретный пример того, как это сделать: http: // stackoverflow.com/a/18809412/1103584 19 сен. 132013-09-19 19:12:37


55

Вы должны установить tintColor для всего приложения.

self.window.tintColor = [UIColor redColor]; 

Или в Swift 3:

self.window?.tintColor = UIColor.blue 

Источник: iOS 7 UI Transition Guide

+4

Если вы хотите установить цвет кнопки шеврона (а не всего приложения), как указано в исходном вопросе, это неправильный ответ. См. Мой ответ здесь для правильного ответа: http://stackoverflow.com/a/18809412/1103584 19 сен. 132013-09-19 19:12:20

+1

этот ответ не работает. неверный ответ. !!!!!! 03 окт. 132013-10-03 14:49:59

  0

Я использовал это в своем делегате приложения, чтобы изменить свои кнопки на черный. Место в методе applicationDidFinishLaunchingWithOptions ... window.tintColor = [UIColor blackColor]; 14 окт. 132013-10-14 13:17:44

  0

Это не может работать на iOS 6. Кто-нибудь знает, что делать? 17 окт. 132013-10-17 00:31:03

+1

Вы должны использовать принятый ответ! 30 окт. 152015-10-30 18:04:49

+1

Это заставило его повлиять на tintColor всего приложения, в которое входит любой UIActivityViewController (для совместного использования) и MFMailComposeViewController (для отправки электронной почты). Эти диалоги предполагают, что tintColor не был изменен с помощью ... и может привести к некоторым уродливым цветовым взаимодействиям. 22 ноя. 152015-11-22 19:05:30

  0

Это изменяет цвет оттенка многих других объектов, таких как мигающий курсор в 'UITextField'. Определенно не рекомендуется. 05 май. 162016-05-05 04:57:09


7

В IOS 6, tintColor тонированное фон панели навигации, панели вкладок, панели инструментов, панели поиска, и сфера применения баров. Чтобы подкрасить фоновый фон в iOS 7, вместо этого используйте свойство barTintColor.

iOS 7 Design Resources iOS 7 UI Transition Guide

+2

Это тот! ... поставьте его в делегат приложения. Работает как шарм! window.tintColor = [UIColor blackColor]; // Я хотел черный 14 окт. 132013-10-14 13:14:13


53

Вы можете установить цвет на панели все приложения НАВИГАЦИЯ, используя метод

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

22

можно изменить цвет только Эрроу (цвет не кнопку назад заголовка в) на этом пути:

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

Навигационная панель содержит подвид типа _UINavigationBarBackIndicatorView (последний пункт в подобозрения массив), который г Представляет стрелку.

Результат navigation bar with different colors of back button arrow and back button title

+4

В зависимости от порядка подсмотров системных представлений это плохая идея. 12 ноя. 132013-11-12 16:10:54

+2

это сработало, когда настройка self.navigationController.navigationBar.tintColor не работает. 19 июн. 142014-06-19 20:28:11

  0

@GlennMaynard. Вы правы. Лучшим способом реализовать это было бы итерацию по массиву subviews, возвращаемых 'self.navigationController.navigationBar.subviews', до тех пор, пока не будет найдена кнопка« Назад ». 14 авг. 142014-08-14 01:27:46

  0

@EvanR, в то время как решение selmad действительно работало для меня, итерация через массив подзаголовков не была (что я пробовал сначала, потому что я согласен с вами, что было бы разумно сделать это). Если это сработает, добавьте пример. Благодарю. 26 авг. 152015-08-26 15:56:09


11

Внутри RootViewController, который инициализирует navigationController, я ставлю этот код в моем методе viewDidAppear:

//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 - используйте NSForegroundColorAttributeName 17 дек. 132013-12-17 01:29:41


3

Просто изменить NavigationBar цвет вы можете установить оттенок цвета, как показано ниже.

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

Это не повлияет на цвет оттенка в iOS 7. Согласно документам: «Установка свойства tintColor с использованием API-интерфейсов прокси-интерфейса не поддерживается в iOS 7." [Ссылка] (https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html) 04 мар. 142014-03-04 18:00:25


5

Я должен был использовать как:

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

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

И работает для меня, спасибо всем!


2

В прошивкой 7, вы можете поместить следующую строку кода внутри application:didFinishLaunchingWithOptions: в файле AppDelegate.m:

[[UINavigationBar appearance] setTintColor:myColor]; 

Set myColor на цвет вы хотите кнопку назад, чтобы быть в течение всего приложения. Не нужно помещать его в каждый файл.


3

В случае, если вы создаете пользовательскую кнопку возврата на основе UIButton с изображением стрелки, вот фрагмент подкласса. С его помощью вы можете создать кнопку в коде или просто назначить класс в Interface Builder любому UIButton. Обратно Arrow Изображение будет добавлено автоматически и окрашено в цвет текста.

@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 

back button image@2x


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]; 

} 
  0

Отлично. Это помогло мне. Спасибо 22 дек. 142014-12-22 18:56:11


3

Если вы хотите изменить только стрелку назад, но и на весь приложение, сделайте следующее:

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

Theres шанс, это заставит вас отказаться от магазина приложений 06 фев. 152015-02-06 05:29:54

  0

@ Luke, я успешно использовал его несколько раз. Никаких отказов. Но, да, шанс все еще существует. 06 фев. 152015-02-06 06:51:36

  0

По-прежнему вероятно, что он будет разорван в будущей версии iOS 14 фев. 152015-02-14 16:46:34

+1

@Lope, да, почему бы и нет. Я не ищу серебряную пулю. 14 фев. 152015-02-14 17:32:20

  0

Итерация через subviews на iOS 10.1 показывает, что это все еще имя класса, но установка его внешнего вида, как показано здесь, не имеет никакого эффекта для меня. 15 дек. 162016-12-15 22:52:14

  0

@arlomedia, он может сломаться. Попробуйте изучить всю иерархию. 16 дек. 162016-12-16 11:31:15

  0

Я посмотрел на все подлоги UINavigationBar и все подзаголовки этих subviews (_UINavigationBarBackIndicatorView не имеет подзаголовков), но не видел ничего полезного. BTW, я попробовал добавить tintColor непосредственно в _UINavigationBarBackIndicatorView и другие subviews. Это сработало, но цвет вспыхнул и продолжался при навигации. 16 дек. 162016-12-16 23:24:39


20

Если вы используете раскадровки можно установить навигацию оттенок оттенка.

enter image description here

enter image description here

  0

Именно то, что я искал. Спасибо! 17 апр. 172017-04-17 01:46:20


0

Swift 2,0: Окрашивание Кнопки Бар &

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

0

В быстром 3, чтобы изменить UIBarButton назад кнопка стрелка цвет

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

0

Update Swift 3

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

Результат: enter image description here