Текст панели навигации IOS 7 и цвет стрелки

Я хочу установить фон для панели навигации черный, а все цвета внутри него будут белыми.

Итак, я использовал этот код:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

Но кнопка цвет текста, стрелка и кнопка по-прежнему имеют значение синий цвет.
Как изменить эти цвета, как на изображении ниже?

enter image description here

Ответ 1

Поведение от некоторых свойств UINavigationBar изменилось с iOS 7. Вы можете увидеть на изображении ниже:

enter image description here


Две красивые ссылки, которые я хотел бы поделиться с вами. Для получения дополнительной информации вы можете просмотреть эти ссылки:


Документация Apple для barTintColor говорит:

Этот цвет сделан полупрозрачным по умолчанию, если вы не установили полупрозрачное свойство NO.

Пример кода:

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;

Ответ 2

enter image description here

Это заняло у меня около полудня, чтобы понять, но это то, что сработало для меня. Внутри rootViewController, который инициализирует navigationController, я помещаю этот код в свой метод viewDidAppear:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//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]];

Мой полный пост на этом здесь

Ответ 3

Swift3, ios 10

Чтобы глобально назначить цвет, в AppDelegate didFinishLaunchingWithOptions:

let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Swift 4, iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Ответ 4

Ответ на Vin отлично подойдет для меня. Вот то же самое решение для разработчиков С#, использующих Xamarin.iOS/MonoTouch:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;

Ответ 5

[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

Ответ 6

Swift/iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes

Ответ 7

Чтобы изменить цвет заголовка UINavigationBar, правильный способ использования этого кода:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColor устарел в последней версии ios 7. Вместо этого используйте NSForegroundColorAttributeName.

Ответ 8

Если вы хотите изменить заголовок размер текста и цвет текста, вам необходимо изменить заголовок NSDictionaryTextAttributes для двух его объектов:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];

Ответ 9

Я думаю, что предыдущие ответы верны, это другой способ сделать то же самое. Я разделяю его здесь с другими на случай, если он станет полезным для кого-то. Вот как вы можете изменить цвет текста/заголовка для навигационной панели в ios7:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;

Ответ 10

Кажется, что Accessibility управляет в iOS Settings переопределяет почти все, что вы пытаетесь сделать по-цветовым для кнопок панели навигации. Убедитесь, что у вас есть все настройки по умолчанию (установите контрастность, полужирный текст, формы кнопок и т.д.), Иначе вы ничего не увидите. Как только я это сделал, весь код изменения цвета начал работать, как ожидалось. Возможно, вам не нужно будет отключать их, но я не преследовал их дальше.