Изменение оттенка / цвета фона UITabBar - PullRequest
86 голосов
/ 20 февраля 2009

UINavigationBar и UISearchBar оба имеют свойство tintColor, которое позволяет вам изменять цвет оттенка (удивительно, я знаю) обоих этих элементов. Я хочу сделать то же самое с UITabBar в моем приложении, но теперь нашел способ изменить его по умолчанию на черный цвет. Есть идеи?

Ответы [ 18 ]

104 голосов
/ 20 декабря 2011

В iOS 5 добавлены некоторые новые методы внешнего вида для настройки внешнего вида большинства элементов пользовательского интерфейса.

Вы можете настроить таргетинг на каждый экземпляр UITabBar в своем приложении, используя внешний прокси.

Для iOS 5 + 6:

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

Для iOS 7 и выше, пожалуйста, используйте следующее:

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

Использование внешнего вида прокси изменит любой экземпляр панели вкладок во всем приложении. Для конкретного экземпляра используйте одно из новых свойств этого класса:

UIColor *tintColor; // iOS 5+6
UIColor *barTintColor; // iOS 7+
UIColor *selectedImageTintColor;
UIImage *backgroundImage;
UIImage *selectionIndicatorImage;
48 голосов
/ 14 марта 2009

Мне удалось заставить его работать, создав подкласс UITabBarController и используя закрытые классы:

@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end

@implementation CustomUITabBarController


- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    [v setBackgroundColor:kMainColor];
    [v setAlpha:0.5];
    [[self tabBar] addSubview:v];
    [v release];

}
@end
34 голосов
/ 30 декабря 2009

У меня есть приложение к окончательному ответу. В то время как основная схема правильна, хитрость использования частично прозрачного цвета может быть улучшена. Я предполагаю, что это только для того, чтобы пропустить градиент по умолчанию. Кроме того, высота TabBar составляет 49 пикселей, а не 48, по крайней мере, в OS 3.

Итак, если у вас есть подходящее изображение размером 1 x 49 с градиентом, вам следует использовать версию viewDidLoad:

- (void)viewDidLoad {

    [super viewDidLoad]; 

    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    UIImage *i = [UIImage imageNamed:@"GO-21-TabBarColorx49.png"];
    UIColor *c = [[UIColor alloc] initWithPatternImage:i];
    v.backgroundColor = c;
    [c release];
    [[self tabBar] addSubview:v];
    [v release];

}
27 голосов
/ 05 октября 2009

Когда вы просто используете addSubview, ваши кнопки теряют кликабельность, поэтому вместо

[[self tabBar] addSubview:v];

использование:

[[self tabBar] insertSubview:v atIndex:0];
7 голосов
/ 03 февраля 2012

Следующее является идеальным решением для этого. Это прекрасно работает со мной для iOS5 и iOS4.

//---- For providing background image to tabbar
UITabBar *tabBar = [tabBarController tabBar]; 

if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
    // ios 5 code here
    [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
} 
else {
    // ios 4 code here
    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
    UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
    UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
    tabbg_view.backgroundColor = tabbg_color;
    [tabBar insertSubview:tabbg_view atIndex:0];
}
7 голосов
/ 20 февраля 2009

Нет простого способа сделать это, вам нужно создать подкласс UITabBar и реализовать собственный чертеж, чтобы делать то, что вы хотите. Это довольно много работы для эффекта, но это может стоить того. Я рекомендую оставить сообщение об ошибке в Apple, чтобы добавить его в будущий iPhone SDK.

7 голосов
/ 02 января 2014

В iOS 7:

[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];

Я также рекомендую установить в первую очередь в зависимости от ваших визуальных желаний:

[[UITabBar appearance] setBarStyle:UIBarStyleBlack];

Стиль панели устанавливает тонкий разделитель между содержимым просмотра и панелью вкладок.

5 голосов
/ 01 марта 2013

для меня очень просто изменить цвет Tabbar как: -

[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]];


[self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];

Попробуй это !!!

5 голосов
/ 03 июня 2010

[[self tabBar] insertSubview:v atIndex:0]; отлично работает для меня.

3 голосов
/ 31 октября 2014
 [[UITabBar appearance] setTintColor:[UIColor redColor]];
 [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
...