我可以更改UITabBarItem
中的特定UITabBar
的背景颜色吗?
我知道如何更改所选背景的所有背景,使用:
[[UITabBar appearance] setBarTintColor:[UIColor redColor]];
[[UITabBar appearance] setTintColor:[UIColor blueColor]];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor yellowColor]];
但如果没有子类化,只能对一个项目进行吗?
由于
答案 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)
:
此解决方案适用于使用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中。