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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 3

Вы можете установить цвет на всей панели навигации приложения, используя метод

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

Ответ 4

На этом пути можно изменить только цвет стрелки (без цвета названия кнопки):

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

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

Результат панель навигации с разными цветами кнопки "Назад" и "Назад" .

Ответ 5

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

введите описание изображения здесь

введите описание изображения здесь

Ответ 6

Внутри 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]];

Ответ 8

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

Ответ 9

Мне пришлось использовать оба:

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

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

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

Ответ 10

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

}

Ответ 11

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

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

Ответ 12

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

@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

Ответ 13

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

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

Ответ 14

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

[[UINavigationBar appearance] setTintColor:myColor];

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

Ответ 15

Swift 2.0: Панель навигации и кнопки раскраски

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

Ответ 16

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

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

Ответ 17

Обновить Swift 3

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

Результат: введите описание изображения здесь