在iOS 7上更改标签栏的颜色


75

有没有一种方法可以将iOS 7上标签栏的颜色从带有蓝色图标的默认白色更改为具有不同颜色按钮的另一种颜色?


您可能必须将其子类化。我从未尝试过,所以我不是100%确信,但这似乎是可能的解决方案
erdekhayser 2013年

Answers:


207

请尝试以下方法:

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

要设置无效按钮的颜色,请将以下代码放入VC viewDidLoad

UITabBarItem *tabBarItem = [yourTabBarController.tabBar.items objectAtIndex:0];

UIImage *unselectedImage = [UIImage imageNamed:@"icon-unselected"];
UIImage *selectedImage = [UIImage imageNamed:@"icon-selected"];

[tabBarItem setImage: [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[tabBarItem setSelectedImage: selectedImage];

您需要为所有的tabBarItems做到这一点,是的,我知道这是丑陋的,希望有是更清洁的方式来做到这一点。

迅速:

UITabBar.appearance().tintColor = UIColor.red

tabBarItem.image = UIImage(named: "unselected")?.withRenderingMode(.alwaysOriginal)
tabBarItem.selectedImage = UIImage(named: "selected")?.withRenderingMode(.alwaysOriginal)

1
完善。谢谢。还有一个快速的问题,是否有办法为选项卡栏中的非活动按钮着色(未选中时它们为灰色)?
杰克·查桑

2
setFinishedSelectedImage在iOS7中已弃用。
thedp

@null非活动按钮的代码具有forState:UIControlStateNormal,可更改应用程序中所有选项卡栏项目(选中和未选中)的颜色。还有其他状态UIControlStateSelected,但未看到未选中状态。
Sharj 2013年

1
[[UITabBarItem外观] setTitleTextAttributes ..并未更改未选中项目的颜色,它们保持灰色。
Tom Kincaid 2014年

对所有选项卡式项目使用UIControlStateNormal,对所选项目使用UIControlStateSelected,例如:[[UITabBarItem外观] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],NSForegroundColorAttributeName,nil] forState:UIControlStateSelected];
user8675 2014年

22

有一种更简单的方法可以做到这一点。

只需打开文件检查器,然后选择“全局色调”即可。

您还可以在Interface Builder中设置应用程序的颜色。通过文件检查器的“界面生成器文档”部分中的“全局色调”菜单,您可以打开“颜色”窗口或选择特定的颜色。

另请参阅:

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html


8
全局色调菜单不适用于非storyboard笔尖。
QED

5
除非在Xcode 5中对我不起作用,否则这将是很棒的
Robert Atkins 2014年

3
不起作用,Xcode 5.1。“ window.tintColor = [UIColor purpleColor]”确实可以。
Sofi Software LLC 2014年

1
实际上,Interface Builder文档的Global Tint设置不允许您设置应用程序的色调。它允许您设置情节提要的色调-如果有多个,则可以按照上面的代码进行混合,匹配或设置。
jbbenni 2014年

1
真奇怪 我刚刚尝试在iOS 7,Xcode 5.1.1的情节提要中设置色调颜色,这对于由情节提要创建的UITabBar无效。
Alex Zavatone 2014年

18

iOS 7.1.1

如果有人需要使用全局设置色调颜色:

[[UIView appearance] setTintColor:[UIColor whiteColor]];

didFinishLaunchingWithOptionsAppDelegate

同样,下面的代码将以任何viewDidLoad方法仅更改选项卡栏的颜色:

[self.tabBarController.tabBar setTintColor:[UIColor redColor]];

如果使用此选项,是否仍可以逐个屏幕地覆盖颜色?
杰克·查桑

随着第二行的代码,您可以覆盖每个屏幕的颜色seperately
奥马尔法鲁克Almalı

1
这是我发现的唯一可从iOS 7中的VC的VDL中为当前选项卡项目工作的解决方案。[self.tabBarController.tabBar setTintColor:[UIColor orangeColor]];
Alex Zavatone 2014年

9

在应用程序委托didFinishLaunchingWithOptions中:

window.tintColor = [UIColor purpleColor];

为应用程序全局设置色调颜色。


在Xcode 5.1.1中的iOS 7.1上不执行任何操作 即使在AppDelegate中使用_window时也是如此。
Alex Zavatone 2014年

8

将其写在标签栏的View Controller类中:

// Generate a black tab bar
self.tabBarController.tabBar.barTintColor = [UIColor blackColor];

// Set the selected icons and text tint color
self.tabBarController.tabBar.tintColor = [UIColor orangeColor];


1

在“属性检查器”你的标签栏控制器Interface Builder中确保你的底栏设置为不透明标签栏:

选择不透明

现在转到您的AppDelegate.m文件。找:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

然后在花括号之间添加以下代码,以更改标签栏按钮和标签栏背景的颜色:

///----------------SET TAB BAR COLOR------------------------//

//--------------FOR TAB BAR BUTTON COLOR---------------//
[[UITabBar appearance] setTintColor:[UIColor greenColor]];

//-------------FOR TAB BAR BACKGROUND COLOR------------//
[[UITabBar appearance] setBarTintColor:[UIColor whiteColor]];

0

在尝试了所有建议的解决方案之后,我找不到任何有帮助的方法。

我终于尝试了以下方法:

[self.tabBar setTintColor:[UIColor orangeColor]];

效果很好。

我为每个TabBarItem只提供了一张图像。甚至不需要selectedImage。

我什至在Child-ViewControllers中使用它来设置不同的TintColors:

UIColor *theColorYouWish = ...;
if ([[self.parentViewController class] isSubclassOfClass:[UITabBarController class]]){
    UITabBarController *tbc = (UITabBarController *) self.parentViewController;
    [tbc.tabBar setTintColor:theColorYouWish];
}

-3

您可以将颜色和字体设置为setTitleTextattribute:

UIFont *font= (kUIScreenHeight>KipadHeight)?[UIFont boldSystemFontOfSize:32.0f]:[UIFont boldSystemFontOfSize:16.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName,
                            tintColorLight, NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.