Changing tab bar item image and text color iOS

前端 未结 22 1041
说谎
说谎 2020-12-02 06:10

Here is my tab bar:

\"enter

The following image shows the program being run an

相关标签:
22条回答
  • 2020-12-02 06:46

    From here.

    Each tab bar item has a title, selected image, unselected image, and a badge value.

    Use the Image Tint (selectedImageTintColor) field to specify the bar item’s tint color when that tab is selected. By default, that color is blue.

    0 讨论(0)
  • 2020-12-02 06:47

    Swift 3

    I did it by creating a custom tabbar controller and added this code inside the viewDidLoad method.

        if let count = self.tabBar.items?.count {
            for i in 0...(count-1) {
                let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
                let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]
    
                self.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
                self.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
            }
        }
    
        let selectedColor   = UIColor(red: 246.0/255.0, green: 155.0/255.0, blue: 13.0/255.0, alpha: 1.0)
        let unselectedColor = UIColor(red: 16.0/255.0, green: 224.0/255.0, blue: 223.0/255.0, alpha: 1.0)
    
        UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor], for: .normal)
        UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor], for: .selected)
    

    It worked for me!

    0 讨论(0)
  • 2020-12-02 06:49

    Swift 5:

    let homeTab = UITabBarItem(title: "Home", image: UIImage(named: "YOUR_IMAGE_NAME_FROM_ASSETS")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal), tag: 1)
    
    0 讨论(0)
  • 2020-12-02 06:49

    Simply add a new UITabBarController reference to the project.Next create a reference of UITabBar in this controller:

    @IBOutlet weak var appTabBar: UITabBar!
    

    In its viewDidLoad(), simply add below for title text color:

        appTabBar.tintColor = UIColor.scandidThemeColor()
    

    For image

        tabBarItem = UITabBarItem(title: "FirstTab", image: UIImage(named: "firstImage"), selectedImage: UIImage(named: "firstSelectedImage"))
    
    0 讨论(0)
  • 2020-12-02 06:50

    From UITabBarItem class docs:

    By default, the actual unselected and selected images are automatically created from the alpha values in the source images. To prevent system coloring, provide images with UIImageRenderingModeAlwaysOriginal.

    The clue is not whether you use UIImageRenderingModeAlwaysOriginal, the important thing is when to use it.

    To prevent the grey color for unselected items, you will just need to prevent the system colouring for the unselected image. Here is how to do this:

    var firstViewController:UIViewController = UIViewController()
    // The following statement is what you need
    var customTabBarItem:UITabBarItem = UITabBarItem(title: nil, image: UIImage(named: "YOUR_IMAGE_NAME")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), selectedImage: UIImage(named: "YOUR_IMAGE_NAME"))
    firstViewController.tabBarItem = customTabBarItem
    

    As you can see, I asked iOS to apply the original color (white, yellow, red, whatever) of the image ONLY for the UNSELECTED state, and leave the image as it is for the SELECTED state.

    Also, you may need to add a tint color for the tab bar in order to apply a different color for the SELECTED state (instead of the default iOS blue color). As per your screenshot above, you are applying white color for the selected state:

    self.tabBar.tintColor = UIColor.whiteColor()
    

    EDIT:

    enter image description here

    0 讨论(0)
  • 2020-12-02 06:50

    In Swift 4.2:

    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)
    
    0 讨论(0)
提交回复
热议问题