在Swift中设置活动标签栏项目的背景颜色

如果可能的话,我希望能够在不使用图像的情况下完成这个任务。 有没有办法以编程方式创build图像中显示的效果,而不必将每个选项卡呈现为图像?

每个我在SO上看过的问题都将标签保存为JPG格式,这比我觉得应该是更多的工作。

有任何想法吗? 标签栏

我采取了类似的方式@matcartmill,但不需要一个特殊的形象。 这个解决scheme只是基于你的颜色。

// set red as selected background color let numberOfItems = CGFloat(tabBar.items!.count) let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: tabBar.frame.height) tabBar.selectionIndicatorImage = UIImage.imageWithColor(UIColor.redColor(), size: tabBarItemSize).resizableImageWithCapInsets(UIEdgeInsetsZero) // remove default border tabBar.frame.size.width = self.view.frame.width + 4 tabBar.frame.origin.x = -2 

我正在使用UIImage的以下扩展:

 extension UIImage { class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { let rect: CGRect = CGRectMake(0, 0, size.width, size.height) UIGraphicsBeginImageContextWithOptions(size, false, 0) color.setFill() UIRectFill(rect) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } } 

我希望这有帮助!

更新SWIFT 3:

 let numberOfItems = CGFloat((tabBarController?.tabBar.items!.count)!) let tabBarItemSize = CGSize(width: (tabBarController?.tabBar.frame.width)! / numberOfItems, height: (tabBarController?.tabBar.frame.height)!) tabBarController?.tabBar.selectionIndicatorImage = UIImage.imageWithColor(color: UIColor.black, size: tabBarItemSize).resizableImage(withCapInsets: .zero) tabBarController?.tabBar.frame.size.width = self.view.frame.width + 4 tabBarController?.tabBar.frame.origin.x = -2 extension UIImage { class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { let rect: CGRect = CGRect(x: 0, y: 0, width: size.width, height: size.height) UIGraphicsBeginImageContextWithOptions(size, false, 0) color.setFill() UIRectFill(rect) let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return image } } 

所以这就是我最终做的。 这是一个混合使用640×49 PNG,这是我需要的蓝色“突出显示”背景的颜色。

在AppDelegate.swift中:

 var selectedBG = UIImage(named:"tab-selected-full")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 0, 0, 0)) UITabBar.appearance().selectionIndicatorImage = selectedBG 

然后在第一个视图控制器被加载,我有:

 tabBarController?.tabBar.frame.size.width = self.view.frame.width+4 tabBarController?.tabBar.frame.origin.x = -2 

上述两行的原因是,默认情况下,Apple在标签栏的左侧和右侧与标签栏项目之间有2px的边框。

在上面,我只是简单地将标签栏放大4px,然后对其进行偏移,使得左边的边框恰好落在视图的外面,因此右边的边框也会落在视图之外。