如何在swift中更改标签栏的色调?

时间:2015-11-07 14:12:34

标签: swift uitabbarcontroller xcode7 tabbar

我使用标签栏,我有2个颜色问题。

第一个问题,色调颜色为灰色,我使用了一些代码将其更改为白色但仅在按下标签时变为白色。

var instances = 
    from t in Assembly.GetExecutingAssembly().GetTypes()
    where t.GetInterfaces().Contains(typeof(ISomething))
         && t.GetConstructor(Type.EmptyTypes) != null
    select Activator.CreateInstance(t) as ISomething;

第二个问题,按下的标签的背景颜色应该改变,但它没有改变。

  

这是标签栏的外观。   enter image description here

     

这就是它应该看的样子。enter image description here

(第一张图片在Xcode Simulator中就像测试一样,第二张图片就是它的设计,所以它对标签的图像和文字并不重要)

所以它假设所有标签始终是白色的,并且当按下标签时只更改标签的背景颜色。

1 个答案:

答案 0 :(得分:8)

要解决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.
    }
}

*第一个extensionUIImage来自同一作者的另一个问题:How to change default grey color of tab bar items?