IOS 8 Tab Bar Item Background Colour

前端 未结 5 828
没有蜡笔的小新
没有蜡笔的小新 2020-11-30 04:11

I\'ve been trying to find the solution to this for the last week, and I have had no luck after trying every possible solution I could find or think of. Every solution I foun

5条回答
  •  南笙
    南笙 (楼主)
    2020-11-30 04:52

    In your tabBarController, you can set the default UITabBar tintColor, barTintColor, selectionIndicatorImage (cheating a bit here) and renderingMode of the images, see comments below:

        class MyTabBarController: UITabBarController, UINavigationControllerDelegate {
          ...
          override func viewDidLoad() {
            ...
            // Sets the default color of the icon of the selected UITabBarItem and Title
            UITabBar.appearance().tintColor = UIColor.redColor()
    
            // Sets the default color of the background of the UITabBar
            UITabBar.appearance().barTintColor = UIColor.blackColor()
    
            // Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar)
            UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))
    
            // Uses the original colors for your images, so they aren't not rendered as grey automatically.
            for item in self.tabBar.items as! [UITabBarItem] {
              if let image = item.image {
                item.image = image.imageWithRenderingMode(.AlwaysOriginal)
              }
            }
          }
          ...
        }
    

    And you will want to extend the UIImage class to make the plain colored image with the size you need:

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

提交回复
热议问题