it-swarm.com.ru

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

233
1110

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

enter image description here


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

  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;
750
Bhavin

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

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

85
John Riselvato

Swift3, ios 1

Чтобы глобально назначить цвет, в 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
37
lifeisfoo

Ответ Вин отлично сработал для меня. Вот то же решение для разработчиков на 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;
20
benhorgen
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
12
Abo3atef

Swift/iOS8

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

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

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

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

8
aZtraL-EnForceR

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

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

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

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

1
strangeluck