Змініть колір відтінку панелі вкладок на iOS 7


75

Чи є спосіб змінити відтінок панелі вкладок на iOS 7 із білого із синіми значками за замовчуванням на інший кольоровий відтінок за допомогою різних кольорових кнопок?


Можливо, вам доведеться підкласувати його. Я ніколи не пробував, тому не впевнений на 100%, але це видається можливим рішенням
erdekhayser

Відповіді:


207

Спробуйте нижче:

[[UITabBar appearance] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];

Щоб підфарбувати неактивні кнопки, вставте нижче код у свої ВК viewDidLoad:

UITabBarItem *tabBarItem = [yourTabBarController.tabBar.items objectAtIndex:0];

UIImage *unselectedImage = [UIImage imageNamed:@"icon-unselected"];
UIImage *selectedImage = [UIImage imageNamed:@"icon-selected"];

[tabBarItem setImage: [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem setSelectedImage: selectedImage];

Вам потрібно зробити це для всіх tabBarItems, і так, я знаю, що це потворно і сподіваюся, що це буде більш чистий спосіб.

Стрімкий:

UITabBar.appearance().tintColor = UIColor.red

tabBarItem.image = UIImage(named: "unselected")?.withRenderingMode(.alwaysOriginal)
tabBarItem.selectedImage = UIImage(named: "selected")?.withRenderingMode(.alwaysOriginal)

1
Ідеально Дякую. Ще одне швидке запитання, чи є спосіб підфарбувати неактивні кнопки на панелі вкладок (вони сірі, якщо їх не вибрати)?
Джейк Часан,

2
setFinishedSelectedImage застаріло в iOS7.
thedp

@null Код для неактивних кнопок має forState: UIControlStateNormal, який змінює колір усіх елементів панелі вкладок (вибраних та не вибраних) у моїй програмі. Існує інший штат UIControlStateSelected, але не бачив невибраного.
Шардж

1
[[Вигляд UITabBarItem] setTitleTextAttributes .. не змінив колір невідібраних елементів, вони залишаються сірими.
Том Кінкейд

Використовуйте UIControlStateNormal для всіх елементів панелі вкладок, використовуйте UIControlStateSelected для вибраних елементів, наприклад: [[UITabBarItem вигляд] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], NSForegroundColorAttributeName; NT;
user8675

22

Для цього існує набагато простіший спосіб.

Просто відкрийте інспектор файлів і виберіть "глобальний відтінок".

Ви також можете встановити колір відтінку програми в Interface Builder. Меню «Глобальний відтінок» у розділі «Інструмент конструктора інтерфейсів» інспектора файлів дозволяє відкрити вікно «Кольори» або вибрати певний колір.

Також див.

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html


8
Глобальне меню відтінків недоступне для периметрів, які не належать до сторибордів.
QED

5
Це було б чудово, за винятком того, що це не працює для мене в Xcode 5.
Роберт Аткінс

3
Не працює, Xcode 5.1. "window.tintColor = [UIColor purpleColor]" робить.
Sofi Software LLC,

1
Налаштування глобального відтінку документа Interface Builder насправді не дозволяє встановити відтінок для програми. Це дозволяє вам встановити відтінок для Раскадровки - якщо у вас декілька, ви можете змішувати та поєднувати або встановлювати його в коді, як зазначено вище.
jbbenni

1
Як дивно. Я щойно спробував встановити колір відтінку в Storyboard, в iOS 7, Xcode 5.1.1, і це нічого не робить для створеної Storyboard UITabBar.
Alex Zavatone

18

iOS 7.1.1

Якщо комусь потрібно буде використовувати глобально встановлений колір відтінку:

[[UIView appearance] setTintColor:[UIColor whiteColor]];

У didFinishLaunchingWithOptionsз AppDelegate.

Також нижче код змінить лише колір відтінку панелі вкладок у будь-якому viewDidLoadспособі:

[self.tabBarController.tabBar setTintColor:[UIColor redColor]];

Якщо ви використовуєте цю опцію, чи можете ви все-таки перевизначити колір для кожного екрану?
Джейк Часан,

За допомогою коду у другому рядку ви можете окремо замінити колір для кожного екрану
Ömer Faruk Almalı

1
Це єдине рішення, яке я знайшов, яке працює з VDL VC в iOS 7 для поточного елемента вкладки. [self.tabBarController.tabBar setTintColor: [UIColor orangeColor]];
Alex Zavatone

9

У делеґаті програми didFinishLaunchingWithOptions:

window.tintColor = [UIColor purpleColor];

встановлює глобальний колір відтінку для програми.


Нічого не робить на iOS 7.1 у Xcode 5.1.1. Навіть при використанні _window в AppDelegate.
Alex Zavatone

8

Напишіть це у своєму класі контролера перегляду на панелі вкладок:

// Generate a black tab bar
self.tabBarController.tabBar.barTintColor = [UIColor blackColor];

// Set the selected icons and text tint color
self.tabBarController.tabBar.tintColor = [UIColor orangeColor];


1

У розділі " Інспектор атрибутів " контролера панелі вкладок у Конструкторі інтерфейсів переконайтеся, що для нижньої панелі встановлено непрозору панель вкладок:

Виберіть Непрозорий

Тепер перейдіть до вашого файлу AppDelegate.m . Знайти:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

А потім додайте цей код між фігурними дужками, щоб змінити кольори як кнопок панелі вкладок, так і фону панелі вкладок:

///----------------SET TAB BAR COLOR------------------------//

//--------------FOR TAB BAR BUTTON COLOR---------------//
[[UITabBar appearance] setTintColor:[UIColor greenColor]];

//-------------FOR TAB BAR BACKGROUND COLOR------------//
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

0

Спробувавши всі запропоновані рішення, я не зміг знайти дуже корисних.

Нарешті я спробував наступне:

[self.tabBar setTintColor:[UIColor orangeColor]];

що вийшло чудово.

Я надав лише одне зображення для кожного TabBarItem. Навіть не знадобився вибраний Зображення.

Я навіть використовував його всередині Child-ViewControllers для встановлення різних кольорів TintColors:

UIColor *theColorYouWish = ...;
if ([[self.parentViewController class] isSubclassOfClass:[UITabBarController class]]){
    UITabBarController *tbc = (UITabBarController *) self.parentViewController;
    [tbc.tabBar setTintColor:theColorYouWish];
}

-3

Ви можете встановити колір і шрифт відтінку як setTitleTextattribute:

UIFont *font= (kUIScreenHeight>KipadHeight)?[UIFont boldSystemFontOfSize:32.0f]:[UIFont boldSystemFontOfSize:16.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName,
                            tintColorLight, NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.