改变UITabBar的Tint / Background颜色

UINavigationBar和UISearchBar都有一个tintColor属性,允许你改变这两个项目的色调(令人惊讶,我知道)。 我想在我的应用程序中对UITabBar执行相同的操作,但是现在已经find了将其从默认黑色更改为其它方法的方法。 有任何想法吗?

我已经能够通过inheritanceUITabBarController并使用私有类来实现它:

@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增加了一些新的外观方法来定制大多数UI元素的外观。

您可以通过使用外观代理来定位您的应用程序中的每个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; 

我有一个最后答案的附录。 虽然基本的scheme是正确的,使用部分透明颜色的窍门可以改善。 我假设它只是让默认渐变显示。 哦,同样,TabBar的高度是49像素,而不是48,至less在操作系统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时,你的button将失去可点击性,所以而不是

 [[self tabBar] addSubview:v]; 

使用:

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

以下是完美的解决scheme。 这适用于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]]; 

我也build议先根据你的视觉欲望来设置:

 [[UITabBar appearance] setBarStyle:UIBarStyleBlack]; 

酒吧风格在你的视图内容和你的标签栏之间有一个微妙的分隔。

有没有简单的方法来做到这一点,你基本上需要inheritanceUITabBar和实现自定义绘图做你想做的。 这样做效果相当不错,但也许值得。 我build议向苹果提交一个bug,以便将其添加到未来的iPhone SDK中。

[[self tabBar] insertSubview:v atIndex:0]; 为我完美的作品。

对我来说,它非常简单的改变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"]; 

尝试这个!!!

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

只是背景颜色

 Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour]; 

或者在App Delegate中

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

用于改变tabbar的非select图标的颜色

对于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]]; 

现有答案中有一些很好的想法,其中许多工作方式略有不同,您select的内容也取决于您定位的设备以及您希望达到的外观。 UITabBar在定制外观时是非常不直观的,但是这里有一些技巧可以帮助你:

1)。 如果你想摆脱光泽覆盖更平坦的外观做:

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

2)。 要将自定义图像设置为TabBarbutton,请执行以下操作:

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

selectedunselected是您所select的UIImage对象。 如果你希望它们是一个平坦的颜色,我发现最简单的解决scheme是创build一个具有所需的backgroundColorUIView ,然后在QuartzCore的帮助下将其渲染成UIImage 。 我在UIView一个类别中使用下面的方法来获得一个UIImage视图的内容:

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

3)最后,您可能想要自定义button标题的样式。 做:

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

这可以让你做一些调整,但仍然相当有限。 特别是,您不能自由修改文本放置在button内的位置,对于选定/未选定的button不能有不同的颜色。 如果你想做更具体的文本布局,只需要设置UITextAttributeTextColor清晰,并将你的文本添加到部分(2)的selectedunselected图像。

 [v setBackgroundColor ColorwithRed: Green: Blue: ]; 

另一个解决scheme(这是一个黑客)是将tabBarController上的alpha设置为0.01,以便它几乎不可见但仍然可点击。 然后使用自定义的tabbar图像在Alpha'ed tabBarCOntroller下面的MainWindow nib底部设置一个ImageView控件。 然后交换图像,改变颜色或高亮当tabbarcontroller切换的意见。

然而,你失去了“…更多”和自定义function。

您好有使用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回答:(来自Vaibhav Gaikwad)

为了改变tabbar的非select图标的颜色:

 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) 

Swift 3使用你的AppDelegate外观做下面的事情:

UITabBar.appearance().barTintColor = your_color