it-swarm.com.ru

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

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

172
kevinl

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

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

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

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

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

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

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

self.window.tintColor = [UIColor redColor];

Или в Swift 3:

self.window?.tintColor = UIColor.blue

Источник: Руководство по переходу на iOS 7

57
Bart van Kuik

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

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

Таким способом можно изменить только цвет стрелки (не цвет заголовка кнопки назад):

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

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

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

23
selmad

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

enter image description here

enter image description here

22
ThE uSeFuL

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

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

Руководство по переходу с iOS 7 на iOS 7

7
Chamath Jeevan

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

6
Mike Weller
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];

}
5
Salim

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

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

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

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

5
Márcia Silva

Если вы хотите изменить только Back Arrow НО во всем приложении, сделайте это:

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

Обновление 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

3
Ricardo Mutti

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

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
3
Khash Nejad

В случае, если вы создаете пользовательскую кнопку возврата на основе UIButton с изображением стрелки, здесь приведен фрагмент подкласса. Используя его, вы можете создать кнопку в коде или просто назначить класс в Интерфейсном Разработчике для любой 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

3
Eugene Braginets

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

[[UINavigationBar appearance] setTintColor:myColor];

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

2
Geo1088

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

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

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

self.navigationController?.navigationBar.tintColor = UIColor.black
0
Dilip Jangid