UITabBar在iOS7上更改一个UITabBarItem的背景颜色

时间:2013-12-05 21:01:45

标签: ios objective-c ios7 uitabbar uitabbaritem

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

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

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

但如果没有子类化,只能对一个项目进行吗?

由于

5 个答案:

答案 0 :(得分:30)

您可以将子视图添加到父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)

答案 1 :(得分:6)

Swift中的

此解决方案适用于使用Auto Layout的应用。其他解决方案之间的主要区别在于:tabBar.frame.width未获得实际设备的屏幕宽度。因此,bgView出现了错误的地方。

您可以使用以下方法修复此问题:UIScreen.main.bounds.width

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

49是默认高度UITabbar

答案 2 :(得分:3)

Objective C解决方案:

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

答案 3 :(得分:1)

针对Swift 4进行了更新:

let itemIndex: CGFloat = 2.0
let bgColor = UIColor.ownBlue

let itemWidth = tabBar.frame.width / CGFloat(tabBar.items!.count)
let bgView = UIView(frame: CGRect(x: itemWidth * itemIndex, y: 0, width: itemWidth, height: tabBar.frame.height))

bgView.backgroundColor = bgColor
tabBar.insertSubview(bgView, at: 0)

答案 4 :(得分:0)

你不能用色调颜色属性真正做到这一点。请参阅this post,即使setSelectedImageTintColor似乎并没有真正起作用(我上次检查时也没有)。

解决方案是即时更改相关项目的tintColor。只要所选项目发生变化,您就可以通过实施UITabBarDelegate方法tabBar:didSelectItem:来执行此操作 ad hoc 。在app delegate中。