如何更改 swift 中标签栏的色调?
How to change tint color of tab bar in swift?
我正在使用标签栏,但我有 2 个颜色问题。
第一个问题,色调是灰色的,我用一些代码把它改成白色,但只有在按下标签时它才会变成白色。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let barColor = UIColor(red: 49/255, green: 75/255, blue: 108/255, alpha: 1.0)
let pressedTintColor = UIColor.whiteColor()
UITabBar.appearance().barTintColor = barColor
UITabBar.appearance().tintColor = pressedTintColor
return true
}
第二个问题,按下的标签的背景颜色应该改变,但它没有改变。
This is how tab bar looks.
And this is how it's supposed to look.
(第1张图在Xcode模拟器中作为测试,第2张图是它的设计,所以关于标签的图像和文本并不重要)
所以它应该是所有选项卡一直是白色的,并且当按下一个选项卡时只改变选项卡的背景颜色。
要解决您 AppDelegate
中的问题,请执行以下操作:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UITabBar.appearance().tintColor = UIColor.whiteColor()
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal)
return true
}
然后在你的 ViewController
中做这样的事情:
extension UIImage {
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, size.width, size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
extension UIImage {
func imageWithColor(tintColor: 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, CGBlendMode.Normal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
tintColor.setFill()
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
}
class FirstViewController: UIViewController {
var tabBar: UITabBar?
override func viewDidLoad() {
super.viewDidLoad()
tabBar = self.tabBarController!.tabBar
tabBar!.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar!.frame.width/CGFloat(tabBar!.items!.count), tabBar!.frame.height))
// To change tintColor for unselected tabs
for item in tabBar!.items! as [UITabBarItem] {
if let image = item.image {
item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
*第一个extension
到UIImage
摘自同一作者的另一个问题:
我正在使用标签栏,但我有 2 个颜色问题。
第一个问题,色调是灰色的,我用一些代码把它改成白色,但只有在按下标签时它才会变成白色。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let barColor = UIColor(red: 49/255, green: 75/255, blue: 108/255, alpha: 1.0)
let pressedTintColor = UIColor.whiteColor()
UITabBar.appearance().barTintColor = barColor
UITabBar.appearance().tintColor = pressedTintColor
return true
}
第二个问题,按下的标签的背景颜色应该改变,但它没有改变。
This is how tab bar looks.
And this is how it's supposed to look.
(第1张图在Xcode模拟器中作为测试,第2张图是它的设计,所以关于标签的图像和文本并不重要)
所以它应该是所有选项卡一直是白色的,并且当按下一个选项卡时只改变选项卡的背景颜色。
要解决您 AppDelegate
中的问题,请执行以下操作:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UITabBar.appearance().tintColor = UIColor.whiteColor()
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal)
return true
}
然后在你的 ViewController
中做这样的事情:
extension UIImage {
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, size.width, size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
extension UIImage {
func imageWithColor(tintColor: 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, CGBlendMode.Normal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
tintColor.setFill()
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
}
class FirstViewController: UIViewController {
var tabBar: UITabBar?
override func viewDidLoad() {
super.viewDidLoad()
tabBar = self.tabBarController!.tabBar
tabBar!.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar!.frame.width/CGFloat(tabBar!.items!.count), tabBar!.frame.height))
// To change tintColor for unselected tabs
for item in tabBar!.items! as [UITabBarItem] {
if let image = item.image {
item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
*第一个extension
到UIImage
摘自同一作者的另一个问题: