改变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)]; }
selected
和unselected
是您所select的UIImage
对象。 如果你希望它们是一个平坦的颜色,我发现最简单的解决scheme是创build一个具有所需的backgroundColor
的UIView
,然后在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)的selected
和unselected
图像。
[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