Колір тексту та стрілки навігаційної панелі IOS 7


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 respotsToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Євгеній С


Цікаво, що ваш код працював для мене чудово (просто хотів змінити колір тексту на білий). Дякую!
Вільям Т. Маллард

Який синій колір ви використовуєте? Виглядає добре!
ebi

@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
@Chelsea: Як щодо цього рядка? :[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.
руситься

Так, Джон. Я вчора витратив близько години також на це. Одна з проблем (велика проблема) полягала в тому, що документи були жахливими у вказуванні всіх можливих атрибутів. Будь-яка ідея, де вони можуть бути перераховані? 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
нехай textAttributes = NSMutableDictionary (місткість: 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 для двох його об'єктів:

    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.