如何更改特定UITabBarItem的背景

时间:2016-08-30 00:41:39

标签: ios swift swift2 uitabbar uitabbaritem

如何更改UITabBar中其中一个标签按钮的背景颜色?我想重新创建Instragram的旧标签栏设计(pictured on top),其中"发布图片"中间的标签有不同的背景颜色。

接下来,是否有一种方法可以让颜色在图标周围显示为圆形?或者在那时我是否必须使用模拟的自定义工具栏作为标签栏?

1 个答案:

答案 0 :(得分:2)

    let count = CGFloat(tabBar.items!.count)
    let itemSize = CGSize(width: tabBar.frame.size.width / count, height: tabBar.frame.height)

    for (index, _) in tabBar.items!.enumerate() {
      if index == 2 {
        let xPosition = itemSize.width * CGFloat(index)
        let backgroundColor = UIView.init(frame: CGRect.init(x: xPosition, y: 0, width: itemSize.width, height: itemSize.height))
        backgroundColor.backgroundColor = UIColor.redColor()
        tabBar.insertSubview(backgroundColor, atIndex: 1)
      }
    }

enter image description here

我不久前实现了类似的效果,上面的代码是关键部分。

<强> UPDATE1:

如果您还想更改特定tabBarItem的所选背景颜色,下面的代码将完成这项工作。您需要继承UITabBarController并覆盖方法tabBar:didSelectItem

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
  let index: Int = tabBar.items!.indexOf(item)!
  if index == 2 {
    tabBar.selectionIndicatorImage = UIImage.fromColor(UIColor.greenColor(), size: CGSize.init(width: UIScreen.mainScreen().bounds.size.width/5, height: 49))
  } else {
    tabBar.selectionIndicatorImage = UIImage.fromColor(UIColor.snpPaleblueColor(), size: CGSize.init(width: UIScreen.mainScreen().bounds.size.width/5, height: 49))
  }
  tabBar.setNeedsDisplay()
}

static func fromColor(color: UIColor, size: CGSize) -> UIImage {
  let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
  UIGraphicsBeginImageContext(rect.size)
  let context = UIGraphicsGetCurrentContext()
  CGContextSetFillColorWithColor(context, color.CGColor)
  CGContextFillRect(context, rect)
  let img = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
  return img
}

<强> UPDATE2:

如果要更改tabBarItem的图像和selectedImage颜色,请使用UIImage的方法imageWithRenderingMode:示例如下所示。

item.image = UIImage.init(named: "tabBarIcon-white").imageWithRenderingMode(.AlwaysOriginal)
item.selectedImage = UIImage.init(named: "tabBarIcon-blue").imageWithRenderingMode(.AlwaysOriginal)