2017-07-26 6 views
0

Ich möchte nur die Hintergrundfarbe eines der Registerkarte Fledermaus Elemente ändern. Ich habe viele Links gefunden, habe aber keine Hilfe bekommen.Ändern Hintergrundfarbe von UITabBarItem in Swift

Voraussetzung: enter image description here

Und das ist die Art, wie ich mein Setup Tableiste Artikel

let myTabBarItem3 = (self.tabBar.items?[2])! as UITabBarItem 
myTabBarItem3.image = UIImage(named: "ic_center")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 
myTabBarItem3.selectedImage = UIImage(named: "ic_center")?.withRenderingMode(UIImageRenderingMode.alwaysOriginal) 

Was ich will, ist die schwarze Farbe Hintergrund für Mitte Tableiste Artikel.

Irgendeine Idee?

Und ja, es ist kein Duplikat, weil die vorherige beantwortet nicht korrekt sind und zusätzliche Subview hinzuzufügen, ist nie eine gute Option, so dass einige gute Lösung von Freunden erwartet

Antwort

0

Sie ein Subview der hinzufügen parent tabBar Dann können Sie eine Hintergrundfarbe für die Unteransicht festlegen. Berechnen Sie den Offset und die Breite Ihrer TabBarItem und fügen Sie die SubView darunter ein.

let itemIndex = 2 
let bgColor = UIColor(red: 0, green: 0, blue: 0, alpha: 1.0) 

let itemWidth = tabBar.frame.width/CGFloat(tabBar.items!.count) 
let bgView = UIView(frame: CGRectMake(itemWidth * itemIndex, 0, itemWidth, tabBar.frame.height)) 
bgView.backgroundColor = bgColor 
tabBar.insertSubview(bgView, atIndex: 0) 
+0

Danke dir .. Ich habe diese Antwort bereits hier durchlaufen: https: // stacko verflow.com/a/26753432/4033273 –

+0

Jede andere bessere Option? –

0

Sie können Imageview verwenden, dies zu erreichen beeinflussen, versuchen diesen Ansatz

let myImageView: UIImageView = { 
     let imageView = UIImageView() 
     return imageView 
    }() 
    //Now add this imageView as subview and apply constraints 
    tabbar.addSubview(myImageView) 
    myImageView.translatesAutoresizingMaskIntoConstraints = false   
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[v0(28)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": myImageView])) 
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[v0(28)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": myImageView])) 



    tabbar.myImageView.image = UIImage(named: "ic_center")?.withRenderingMode(UIImageRenderingMode.alwaysTemplate) 
    tabbar.myImageView.tintColor = UIColor.black 
+0

Was ist Addconstraints hier ?? –

+0

Diese Methode fügt Einschränkungen für eine Ansicht hinzu, – 3stud1ant3

+0

Das weiß ich, aber was ist die Verwendung hier –

0

Wenn Sie die Hintergrundfarbe nur Zentrum ändern möchten tabBarItem Sie unter Code folgen kann.

HINWEIS: All nachstehende Code wird in einer benutzerdefinierten Klasse verwendet, die UITabBarController als erweitert: tabBarItem Bild Standardfarbe als weiße Farbe

class tabbarVCViewController: UITabBarController, UITabBarControllerDelegate { 

    // MARK: - ViewController Override Methods. 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     setupInitilView() 
    } 

    // MARK: - setup Initial View Methode. 
    private func setupInitilView() { 

     delegate = self 

     // Sets the default color of the icon of the selected UITabBarItem and Title 
     UITabBar.appearance().tintColor = UIColor.white 

     // Sets the default color of the background of the UITabBar 
     UITabBar.appearance().barTintColor = UIColor.white 

     // 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(color: UIColor.black, size: CGSize.init(width: tabBar.frame.width/4, height: 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! { 
      if let image = item.image { 

       //item.image = image.withRenderingMode(.alwaysTemplate) 

       item.image = image.withRenderingMode(.alwaysOriginal) //Use default image colour as grey colour and your centre image default colour as white colour as your requirement. 
      } 
     } 

     //Change the backgound colour of specific tabBarItem. 

     let itemIndex:CGFloat = 2.0 

     let bgColor = UIColor.black 
     let itemWidth = tabBar.frame.width/CGFloat(tabBar.items!.count) 
     let bgView = UIView(frame: CGRect.init(x: itemWidth * itemIndex, y: 0, width: itemWidth, height: tabBar.frame.height)) 
     bgView.backgroundColor = bgColor 
     tabBar.insertSubview(bgView, at: 0) 

    } 

    // MARK: - UITabbarController Override Methods . 
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 

    } 


    // MARK: - UITabBarControllerDelegate Methods 
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 

     return true 
    } 
} 

Verwenden tabBarItem Bilder Standardfarbe grau nach Ihrer UI und Zentrum in Asset.

Und Sie wollen die UIImage Klasse erweitern das einfarbige Bild mit der Größe zu machen benötigen Sie:

extension UIImage { 
    func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     color.setFill() 
     UIRectFill(CGRect.init(x: 0, y: 0, width: size.width, height: size.height)) 
     let image = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image! 
    } 
} 
+0

Danke dir .. Ich bin bereits durch diese Antwort hier gegangen: https://stackoverflow.com/a/31680820/4033273.Diese Antwort ist für die ausgewählte Tableiste –

+0

. Dieser Ansatz funktioniert nicht für Sie. Wenn nicht, können Sie Ihren Code anzeigen, in dem Sie den obigen Code verwenden. –

+0

@Moin Shirazi Überprüfen Sie die aktualisierte Antwort. –

0

Versuchen Sie folgendes:

UITabBar.appearance().tintColor = UIColor.pink 
UITabBar.appearance().barTintColor = UIColor.white 
      if #available(iOS 10.0, *) { 
       UITabBar.appearance().unselectedItemTintColor = UIColor.white 
      } else { 
       // Fallback on earlier versions 
      } 
let x = Double(UIScreen.main.bounds.width/5.0) 
let y = Double(tabBarController!.tabBar.frame.size.height) 
let indicatorBackground: UIImage? = self.image(from: UIColor.black, for: CGSize(width: x, height: y)) 
UITabBar.appearance().selectionIndicatorImage = indicatorBackground 

Hilfsmethoden

func image(from color: UIColor, for size: CGSize) -> UIImage { 
    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
    autoreleasepool { 
     UIGraphicsBeginImageContext(rect.size) 
    } 
    let context: CGContext? = UIGraphicsGetCurrentContext() 
    context?.setFillColor(color.cgColor) 
    context?.fill(rect) 
    let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image! 
} 
Verwandte Themen