IOS 7 Navigation Bar текст и цвет стрелки


234

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

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

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

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

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


1
попробуйте в AppDelegate if ([self.window RespondsToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Евгений С


Интересно, что ваш код работал отлично для меня (просто хотел изменить цвет текста на белый). Спасибо!
Уильям Т. Маллард

Какой синий цвет вы используете? Выглядит хорошо!
Эби

@ebi Некоторые люди не любят делиться. Просто выберите палитру цветов. Или .... вот и все: RGB: (18, 60, 133)
pnizzle

Ответы:


753

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

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


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

  1. Руководство по переходу с iOS 7 .
  2. Как обновить приложение для iOS 7 .

Документация 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;

Я пытался: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6,0 / 255,0 зеленый: 12,0 / 255,0 синий: 19,0 / 255,0 альфа: 1,0]; Но все по-прежнему синий.
1110

2
Я читал это раньше, но это изменить только текст, но не стрелку. Это все еще синий :(
1110


2
@ Челси: Как насчет этой линии? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Бхавин

4
Не забудьте, что вы можете изменить оттенок для всего приложения в appDelegate: [[UINavigationBar появление] setTintColor: [UIColor blackColor]];
simon_smiley

85

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

Это заняло у меня около полдня, чтобы понять, но это то, что сработало для меня. Внутри 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]];

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


1
Если у вас возникли проблемы с изменением цвета стрелки назад, этот фрагмент исправит проблему. Как минимум, вам понадобится последняя строка кода, добавленная к вашему фактическому rootViewController.
rus

Да, Джон Я потратил на это вчера около часа. Одна проблема (большая проблема) заключалась в том, что документы ужасно указывали на все возможные атрибуты. Есть идеи, где они могут быть перечислены? TY.
Алекс Заватоне

Спасибо @john Это накладывается на мой пользовательский цвет, можете ли вы объяснить мне, почему?
Вайбхав Лимбани

Я думаю, что вы должны создать новый вопрос. Я не могу сказать вам, почему, если я не вижу ваш код и что вы делаете. @MacGeek
Джон Риселвато

3
Спасибо, это сработало :). Но UITextAttributeTextColor устарела в iOS 7, теперь вы должны использовать NSForegroundColorAttributeName
YYamil

37

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

21

Ответ Вин отлично сработал для меня. Вот то же решение для разработчиков на C #, использующих 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;

Не знал, что вы можете установить SetTitleTextAttributes так, как вы это сделали.
Брэд Мур

12

Swift / iOS8

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

3
let textAttributes = NSMutableDictionary (acity: 1) теперь является правильным вызовом для инициализации NSMutableDictionary.
Juliensaad

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

1
Мне нравится этот подход, поскольку вы можете установить его в самом AppDelegate, и он использует прокси-сервер Appearance.
Нийог Рэй

8

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

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

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


5

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

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

2

Я думаю, что предыдущие ответы верны, это еще один способ сделать то же самое. Я делюсь этим здесь с другими на случай, если это станет полезным для кого-то. Вот как вы можете изменить цвет текста / заголовка для панели навигации в 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;

1

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


Именно то, что случилось со мной. Мне не удалось изменить цвет оттенка элемента панели кнопок, когда был включен «Жирный текст». Это не хорошо. Теперь мне придется вместо этого использовать графику :-(
Кен

0

Swift 5 / iOS 13

Чтобы изменить цвет заголовка в контроллере:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.