如何更改标签栏非选定的图标在Swift中的颜色?

如何更改标签栏未select的图标和文本的颜色? 我发现这个答案( 如何更改标签栏上不活动的图标/文本颜色? ),但不能实现它为迅速。

下面设置所有UITabBarItem的默认值,你可以将它添加到你的AppDelegate 。 它会改变你的文字颜色。

 UITabBarItem.appearance().setTitleTextAttributes({NSForegroundColorAttributeName: UIColor.blackColor()}, forState:.Selected) UITabBarItem.appearance().setTitleTextAttributes({NSForegroundColorAttributeName: UIColor.whiteColor()}, forState:.Normal) 

要更改图标的颜色,您可以将图像设置为图像已经具有良好颜色的给定状态。

 self.tabBarItem.selectedImage = [[UIImage imageNamed:@"selectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; self.tabBarItem.image = [[UIImage imageNamed:@"notSelectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

或者你可以这样做:

添加一个扩展到UIImage类(从这个答案 ):

 extension UIImage { func imageWithColor(color1: UIColor) -> UIImage { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) let context = UIGraphicsGetCurrentContext() as CGContextRef CGContextTranslateCTM(context, 0, self.size.height) CGContextScaleCTM(context, 1.0, -1.0); CGContextSetBlendMode(context, kCGBlendModeNormal) let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect CGContextClipToMask(context, rect, self.CGImage) color1.setFill() CGContextFillRect(context, rect) let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage UIGraphicsEndImageContext() return newImage } } 

并在你的viewDidLoad

 for item in self.tabBar.items as [UITabBarItem] { if let image = item.image { item.image = image.imageWithColor(UIColor.blackColor()).imageWithRenderingMode(.AlwaysOriginal) } } 

iOS 10

 class TabBarVC: UITabBarController { override func viewDidLoad() { super.viewDidLoad() // make unselected icons white self.tabBar.unselectedItemTintColor = UIColor.white } } 

补充@ BoilingLime的答案,这里是第二个select的UIImage扩展在Swift 3:

 extension UIImage { func imageWithColor(color1: UIColor) -> UIImage { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) let context = UIGraphicsGetCurrentContext()! as CGContext context.translateBy(x: 0, y: self.size.height) context.scaleBy(x: 1.0, y: -1.0); context.setBlendMode(CGBlendMode.normal) let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) context.clip(to: rect, mask: self.cgImage!) color1.setFill() context.fill(rect) let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage UIGraphicsEndImageContext() return newImage } }