Изменение оттенка / цвета фона UITabBar
UINavigationBar и UISearchBar имеют свойство tintColor, которое позволяет вам изменять цвет оттенка (удивительно, я знаю) обоих этих элементов. Я хочу сделать то же самое с UITabBar в моем приложении, но теперь нашел способ изменить его с черного цвета по умолчанию. Есть идеи?
18 ответов:
я смог заставить его работать, подкласс 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
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;
У меня есть дополнение к окончательному ответу. Хотя основная схема верна,трюк с использованием частично прозрачного цвета может быть улучшен. Я предполагаю, что это только для того, чтобы показать градиент по умолчанию. О, кроме того, высота панели вкладок составляет 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]; }
когда вы просто используете addSubview ваши кнопки потеряют кликабельность, так что вместо
[[self tabBar] addSubview:v];
использование:
[[self tabBar] insertSubview:v atIndex:0];
следующим является идеальным решением для этого. Это прекрасно работает со мной для 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]; }
на 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];
стиль панели помещает тонкий разделитель между содержимым представления и панелью вкладок.
нет простого способа сделать это, вам в основном нужно подкласс UITabBar и реализовать пользовательский чертеж, чтобы делать то, что вы хотите. Это довольно много работы для эффекта, но это может быть стоит. Я рекомендую подать ошибку с Apple, чтобы добавить ее в будущий iPhone SDK.
для меня его очень просто изменить цвет панели вкладок, как : -
[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]]; [self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];
попробуйте это!!!
[[UITabBar appearance] setTintColor:[UIColor redColor]]; [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
только для цвета фона
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
или это в App делегат
[[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]];
есть некоторые хорошие идеи в существующих ответах, многие работают немного по-другому, и то, что вы выбираете, также будет зависеть от того, какие устройства вы нацелены и какой вид вы стремитесь достичь.
UITabBar
заведомо неинтуитивно, когда дело доходит до настройки его внешнего вида, но вот еще несколько трюков, которые могут помочь:1). Если вы хотите избавиться от глянцевого наложения для более плоского взгляда, сделайте:
tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background [tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss
2). Установка пользовательских изображений на панель вкладок кнопки делают что-то вроде:
for (UITabBarItem *item in tabBar.items){ [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected]; [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)]; }
здесь
selected
иunselected
areUIImage
объекты по вашему выбору. Если вы хотите, чтобы они были плоским цветом, самое простое решение, которое я нашел, - это создать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).
другое решение (которое является взломом) состоит в том, чтобы установить Альфа на tabBarController в 0.01 так, чтобы он был практически невидимым, но все же кликабельным. Затем установите элемент управления ImageView в нижней части пера MainWindow с пользовательским изображением панели вкладок под alpha'Ed tabBarCOntroller. Затем замените изображения, измените цвета или высокий свет, когда tabbarcontroller переключает виды.
однако, вы теряете '...еще и настроить функционал.
Привет, я использую iOS SDK 4, и я смог решить эту проблему всего с двумя строками кода, и это выглядит так
tBar.backgroundColor = [UIColor clearColor]; tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];
надеюсь, что это помогает!
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]; }
Swift 3.0 ответ: (из Вэбов Gaikwad)
для изменения цвета невыбранных иконок таббара:
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)