UINavigationBar和UISearchBar都具有tintColor属性,该属性使您可以更改这两个项目的色彩(令人惊讶的是,我知道)。我想对我的应用程序中的UITabBar做同样的事情,但是现在找到了将其从默认黑色更改的方法。有任何想法吗?
Answers:
通过子类化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添加了一些新的外观方法,用于自定义大多数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;
我有最后答案的附录。尽管基本方案是正确的,但可以改进使用部分透明颜色的技巧。我认为这仅是为了让默认渐变显示出来。哦,至少在OS 3中,TabBar的高度还是49像素而不是48像素。
因此,如果您具有合适的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];
没有简单的方法可以执行此操作,基本上,您需要继承UITabBar的子类并实现自定义绘图以执行所需的操作。要达到此效果,需要做很多工作,但这可能是值得的。我建议向Apple提交错误,以将其添加到将来的iPhone SDK中。
以下是完美的解决方案。对于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];
}
仅用于背景颜色
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
或在App Delegate中
[[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)。要将自定义图像设置到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
为清晰,然后将文本添加到第(2)部分的selected
和unselected
图片中即可。
嗨,我正在使用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)
要更改选项卡的取消选择图标的颜色:
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)