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

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

Ответы [ 18 ]

2 голосов
/ 03 ноября 2016

только для фона

Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];

или это в App Delegate

[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];

для изменения цвета отмены выбора значков вкладки

Для iOS 10:

// this code need to be placed on home page of tabbar    
for(UITabBarItem *item in self.tabBarController.tabBar.items) {
    item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}

Выше iOS 10:

// this need to be in appdelegate didFinishLaunchingWithOptions
[[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];
1 голос
/ 21 февраля 2013

В существующих ответах есть несколько хороших идей, многие из них работают немного по-другому, и то, что вы выберете, будет также зависеть от того, на какие устройства вы нацеливаетесь и какой вид вы хотите достичь. UITabBar общеизвестно не интуитивен, когда дело доходит до настройки его внешнего вида, но вот еще несколько приемов, которые могут помочь:

1). Если вы хотите избавиться от глянцевой накладки для более плоского вида, сделайте:

tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background
[tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss

2). Чтобы настроить пользовательские изображения для кнопок tabBar, сделайте что-то вроде:

for (UITabBarItem *item in tabBar.items){
    [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected];
    [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)];
}

Где selected и unselected являются UIImage объектами на ваш выбор. Если вы хотите, чтобы они были ровного цвета, самое простое решение, которое я нашел, - это создать UIView с желаемым backgroundColor, а затем просто преобразовать его в UIImage с помощью QuartzCore. Я использую следующий метод в категории на UIView, чтобы получить UIImage с содержимым представления:

- (UIImage *)getImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]);
    [[self layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

3) Наконец, вы можете настроить стиль заголовков кнопок. Есть:

for (UITabBarItem *item in tabBar.items){
    [item setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                [UIColor redColor], UITextAttributeTextColor,
                [UIColor whiteColor], UITextAttributeTextShadowColor,
                [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
                [UIFont boldSystemFontOfSize:18], UITextAttributeFont,
            nil] forState:UIControlStateNormal];
}

Это позволяет вам делать некоторые корректировки, но все же довольно ограниченно. В частности, вы не можете свободно изменять расположение текста внутри кнопки и не можете иметь разные цвета для выбранных / невыбранных кнопок. Если вы хотите сделать более конкретный текстовый макет, просто установите UITextAttributeTextColor, чтобы очистить и добавьте ваш текст в selected и unselected изображений из части (2).

1 голос
/ 08 июня 2009
[v setBackgroundColor ColorwithRed: Green: Blue: ];
0 голосов
/ 04 апреля 2017

Swift 3, используя внешний вид с вашего AppDelegate, сделайте следующее:

UITabBar.appearance().barTintColor = your_color

0 голосов
/ 14 ноября 2016

Swift 3.0 ответ: (от Вайбхава Гайквада)

Для изменения цвета отмените выбор значков на вкладке:

if #available(iOS 10.0, *) {
        UITabBar.appearance().unselectedItemTintColor = UIColor.white
    } else {
        // Fallback on earlier versions
        for item in self.tabBar.items! {
            item.image = item.image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        }
}

Только для изменения цвета текста:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)
0 голосов
/ 07 мая 2013
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];
}
0 голосов
/ 22 декабря 2011

Привет! Я использую iOS SDK 4, и мне удалось решить эту проблему с помощью всего двух строк кода, и это выглядит так

tBar.backgroundColor = [UIColor clearColor];
tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];

Надеюсь, это поможет!

0 голосов
/ 03 августа 2011

Другое решение (которое является взломом) состоит в том, чтобы установить альфа на tabBarController равным 0,01, чтобы он был практически невидимым, но все еще активным. Затем установите элемент управления ImageView в нижней части пера MainWindow с вашим собственным изображением панели вкладок под альфа-вкладкой tabBarCOntroller. Затем поменяйте местами изображения, измените цвет или подсветку, когда контроллер табуляции переключает представления.

Однако вы теряете «... больше» и настраиваете функциональность.

...