Как изменить цвет панели навигации в iOS 7?
Как изменить цвет панели навигации в iOS 7?
В принципе, я хочу добиться чего-то вроде панели Navigator Twitter (обновленный Twitter для iOS7
). Я встроен в навигационную панель поверх view controller
. Все, что я хочу, - это изменить цвет панели навигации на синий, а также панель служебных программ наверху. Кажется, я не могу найти вариант в storyboard
.
Ответы
Ответ 1
Поведение tintColor
для баров изменилось в iOS 7.0. Он больше не влияет на фоновый фон.
Из документации:
barTintColor Ссылка на класс
Цвет оттенка, применяемый к фону навигационной панели.
@property(nonatomic, retain) UIColor *barTintColor
Обсуждение
Этот цвет делается полупрозрачным по умолчанию, если вы не установите для свойства полупрозрачности значение NO
.
Доступность
Доступен в iOS 7.0 и более поздних версиях.
Объявлено в
UINavigationBar.h
Код
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
// iOS 7.0 or later
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
}else {
// iOS 6.1 or earlier
self.navigationController.navigationBar.tintColor = [UIColor redColor];
}
Мы также можем использовать это, чтобы проверить версию iOS в качестве упоминания в Руководстве по переходу на iOS 7 IIS
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// iOS 6.1 or earlier
self.navigationController.navigationBar.tintColor = [UIColor redColor];
} else {
// iOS 7.0 or later
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
}
ИЗМЕНИТЬ
Использование xib
![enter image description here]()
Ответ 2
Выполнить то, что задал первоначальный вопрос - чтобы выглядел старый вид навигационной панели Twitter, синий фон с белым текстом - очень легко сделать, просто используя Interface Builder в Xcode.
- Используя схему документа, выберите панель навигации.
- В Инспекторе Атрибутов в группе "Панель навигации" измените Стиль с По умолчанию на Черный. Это меняет цвет фона строк навигации и состояния на черный, а их текст - на белый. Таким образом, батарея и другие значки и текст в строке состояния будут выглядеть белыми при запуске приложения.
- В той же группе "Панель навигации" измените оттенок панели на цвет по своему вкусу.
- Если у вас есть элементы панели кнопок на панели навигации, они по-прежнему будут отображать их текст по умолчанию в синем цвете, поэтому в Инспекторе атрибутов в группе "Просмотр" измените оттенок на белый цвет.
Это должно получить вам то, что вы хотите. Вот скриншот, который поможет увидеть, где внести изменения.
![Where to make the necessary changes, including the result in iOS Simulator]()
Обратите внимание, что изменение только оттенка не меняет цвет текста на панели навигации или в строке состояния. Стиль также должен быть изменен.
Ответ 3
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;
// *barTintColor* sets the background color
// *tintColor* sets the buttons color
Ответ 4
В приложении на основе навигации вы можете поместить код в AppDelegate. Более подробный код может быть:
// Navigation bar appearance (background and title)
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];
[[UINavigationBar appearance] setTintColor:[UIColor barColor]];
// Navigation bar buttons appearance
[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];
Ответ 5
В viewDidLoad
установите:
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
Измените (blueColor
) на любой цвет.
Ответ 6
Для быстрого изменения цвета панели навигации:
self.navigationController?.navigationBar.barTintColor = UIColor.red
изменить шрифт, размер, цвет заголовка:
self.title = "title"
self.navigationController?.navigationBar.titleTextAttributes = [
NSAttributedString.Key.foregroundColor : UIColor.white,
NSAttributedString.Key.font : UIFont(name: "Futura", size: 30)!
]
Ответ 7
Если вы хотите использовать шестнадцатеричный код, вот лучший способ сделать это.
Сначала определите это в верхней части вашего класса:
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
Затем внутри "application doneFinishLaunchingWithOptions" поместите это:
[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];
Поместите шестнадцатеричный код вместо 00b0f0.
Ответ 8
В iOS 7 вы должны использовать свойство -barTintColor:
navController.navigationBar.barTintColor = [UIColor barColor];
Ответ 9
Если вам нужно поддерживать ios6 и ios7, тогда вы получите этот голубой свет, используя это в UIViewController:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
self.navigationController.navigationBar.translucent = NO;
}else{
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
}
}
Ответ 10
На самом деле это проще, чем ответы, которые я видел здесь:
1) Just make sure you select the navigation bar on the Navigation control.
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).
Надеюсь, это поможет кому-то. Мне не нравились ответы, которые я видел. Мне нравится держать мой код как можно более чистым. Не сказать, что это неправильно делать это программно, но есть люди, такие как я.... это для вас, ребята.
![Changing color of the navigation bar]()
Ответ 11
Чтобы закончить код Rajneesh071, вы также можете установить цвет заголовка панели навигации (и шрифт, если хотите), поскольку поведение по умолчанию изменилось с iOS 6 на 7:
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.translucent = NO;
NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
[textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}
Ответ 12
Добавьте только этот код в ViewContorller
или в AppDelegate
if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
//This is For iOS6
[self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
//This is For iOS7
[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}
Ответ 13
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.tintColor = [UIColor redColor];
//change the nav bar colour
self.navigationController.view.backgroundColor = [UIColor redColor];
//change the background colour
self.navigationController.navigationBar.translucent = NO;
}
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:(BOOL)animated];
self.navigationController.navigationBar.tintColor = [UIColor redColor];
//change the nav bar colour
self.navigationController.view.backgroundColor = [UIColor redColor];
//change the background colour
self.navigationController.navigationBar.translucent = NO;
}
Ответ 14
В приложении на основе навигации вы можете изменить цвет
NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
self.navigationController.navigationBar.translucent = NO;
} else {
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}
Ответ 15
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
if (_kisiOS7)
{
[[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
}
else
{
[[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
[[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
}
Ответ 16
Этот вопрос и эти ответы полезны. С ними я смог установить желаемый синий цвет navigationBar
с белым заголовком и текстом кнопки.
Но мне также нужно было изменить часы, несущую, силу сигнала и т.д. на белый. Черный просто не контрастировал с темно-синим.
Возможно, я забыл это решение в одном из предыдущих ответов, но я смог внести это изменение, добавив эту строку на мой верхний уровень viewController
viewDidLoad
:
[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];
Ответ 17
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}
Ответ 18
Цвет:
[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];
Для изображения
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];