Подтвердить что ты не робот

Изменение цвета оттенка/цвета UITabBar

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

4b9b3361

Ответ 1

Мне удалось заставить его работать, подклассифицируя 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

Ответ 2

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;

Ответ 3

У меня есть дополнение к окончательному ответу. Хотя правильная схема правильная, трюк использования частично прозрачного цвета может быть улучшен. Я предполагаю, что это только для того, чтобы позволить градиенту по умолчанию показывать. О, также, высота 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];

}

Ответ 4

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

[[self tabBar] addSubview:v];

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

[[self tabBar] insertSubview:v atIndex:0];

Ответ 5

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

Ответ 6

Следующее - идеальное решение для этого. Это отлично работает со мной для 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

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

Стиль бара помещает тонкий разделитель между содержимым вашего представления и панель вкладок.

Ответ 8

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

Ответ 9

для меня очень просто изменить цвет 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"];

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

Ответ 10

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

Ответ 11

только для цвета фона

Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];

или это в App Delegate

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

для изменения цвета значков unselect на вкладке

Для 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]];

Ответ 12

[v setBackgroundColor ColorwithRed: Green: Blue: ];

Ответ 13

В существующих ответах есть несколько хороших идей, многие работают немного по-другому, и то, что вы выбираете, также будет зависеть от того, на какие устройства вы нацелитесь и на какой вид вы хотите достичь. 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).

Ответ 14

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

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

Ответ 15

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

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

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

Ответ 16

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

Ответ 17

Ответ 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)

Ответ 18

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

UITabBar.appearance().barTintColor = your_color