uitabbar更改iOS7上的一个uitabbaritem的背景颜色

我可以更改UITabBar中特定UITabBarItem的背景颜色吗?

我知道如何改变所选背景的所有背景,使用:

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

但是,如果没有子类化,只能做一个项目吗?

谢谢

您可以将子视图添加到父项tabBar,并在子视图上设置背景颜色。 您可以使用tabBar框架尺寸来计算tabBarItem的偏移量和宽度,然后在下面插入子视图。

示例(在Swift中):

 // Add background color to middle tabBarItem let itemIndex = 2 let bgColor = UIColor(red: 0.08, green: 0.726, blue: 0.702, alpha: 1.0) let itemWidth = tabBar.frame.width / CGFloat(tabBar.items!.count) let bgView = UIView(frame: CGRectMake(itemWidth * itemIndex, 0, itemWidth, tabBar.frame.height)) bgView.backgroundColor = bgColor tabBar.insertSubview(bgView, atIndex: 0) 

在Swift中:此解决scheme适用于使用Auto Layout应用程序。 其他解决scheme的主要区别是: tabBar.frame.width没有得到实际设备的屏幕宽度。 所以, bgView出现错误的地方。

你可以用下面的方法修复它: UIScreen.mainScreen().bounds.width

 let tabWidth:CGFloat = UIScreen.mainScreen().bounds.width / CGFloat(self.tabbar!.items!.count) let tabIndex:CGFloat = 2 let bgColor:UIColor = UIColor.redColor() let bgView = UIView(frame: CGRectMake(tabWidth * tabIndex, 0, tabWidth, 49)) bgView.backgroundColor = bgColor self.tabbar!.insertSubview(bgView, atIndex: 0) 

49是UITabbar的默认高度

Objective C解决scheme:

 int itemIndex = 3; UIColor* bgColor = [UIColor colorWithRed:(245/255.f) green:(192/255.f) blue:(47/255.f) alpha:1]; float itemWidth = self.tabBarController.tabBar.frame.size.width / 5.0f; //5 = tab bar items UIView* bgView = [[UIView alloc]initWithFrame: CGRectMake(itemWidth*itemIndex, 0,itemWidth, self.tabBarController.tabBar.frame.size.height)]; bgView.backgroundColor = bgColor; [self.tabBarController.tabBar insertSubview:bgView atIndex:1]; 

你不能用tint颜色属性来做到这一点。 看到这个post ,即使setSelectedImageTintColor似乎并没有真正的工作(它没有上次我检查)。

解决方法是更改​​所讨论项目的dynamictintColor 。 您可以通过实施UITabBarDelegate方法tabBar:didSelectItem:例如,在应用程序委托中)来更改所选项目。