2016-08-30 6 views
2

Wie kann ich die Hintergrundfarbe von nur einer der Registerkarten-Schaltflächen in einer UITabBar ändern? Ich möchte das alte Tabbar-Design von Instragram (pictured on top) neu erstellen, wobei die Registerkarte "post picture" in der Mitte eine andere Hintergrundfarbe hat.So ändern Sie den Hintergrund eines bestimmten UITabBarItems

Und eine Folge dazu, gibt es eine Möglichkeit, dass ich die Farbe als einen runden Kreis um das Symbol erscheinen lassen könnte? Oder müsste ich an dieser Stelle eine benutzerdefinierte Symbolleiste verwenden, die simuliert wird, um als eine Leiste zu fungieren?

+0

können Sie die ausgewählte Bildeigenschaft von Tabbar verwenden um das ausgewählte Bild zu setzen – Janmenjaya

Antwort

2
let count = CGFloat(tabBar.items!.count) 
    let itemSize = CGSize(width: tabBar.frame.size.width/count, height: tabBar.frame.height) 

    for (index, _) in tabBar.items!.enumerate() { 
     if index == 2 { 
     let xPosition = itemSize.width * CGFloat(index) 
     let backgroundColor = UIView.init(frame: CGRect.init(x: xPosition, y: 0, width: itemSize.width, height: itemSize.height)) 
     backgroundColor.backgroundColor = UIColor.redColor() 
     tabBar.insertSubview(backgroundColor, atIndex: 1) 
     } 
    } 

enter image description here

ich vor ähnlichen Effekt nicht lange umgesetzt, und der Code oben ist der entscheidende Teil.

Update1:

Wenn Sie auch die ausgewählte Hintergrundfarbe eines bestimmten tabBarItem ändern möchten, den Code unten wird die Arbeit machen. Sie müssen UITabBarController ableiten und die Methode tabBar:didSelectItem überschreiben.

override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    let index: Int = tabBar.items!.indexOf(item)! 
    if index == 2 { 
    tabBar.selectionIndicatorImage = UIImage.fromColor(UIColor.greenColor(), size: CGSize.init(width: UIScreen.mainScreen().bounds.size.width/5, height: 49)) 
    } else { 
    tabBar.selectionIndicatorImage = UIImage.fromColor(UIColor.snpPaleblueColor(), size: CGSize.init(width: UIScreen.mainScreen().bounds.size.width/5, height: 49)) 
    } 
    tabBar.setNeedsDisplay() 
} 

static func fromColor(color: UIColor, size: CGSize) -> UIImage { 
    let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) 
    UIGraphicsBeginImageContext(rect.size) 
    let context = UIGraphicsGetCurrentContext() 
    CGContextSetFillColorWithColor(context, color.CGColor) 
    CGContextFillRect(context, rect) 
    let img = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return img 
} 

Update2:

Wenn Sie ein tabBarItem Bild und SelectedImage Farbe zu ändern, verwenden Sie UIImage ‚s Methode imageWithRenderingMode: Beispiel unten ist.

item.image = UIImage.init(named: "tabBarIcon-white").imageWithRenderingMode(.AlwaysOriginal) 
item.selectedImage = UIImage.init(named: "tabBarIcon-blue").imageWithRenderingMode(.AlwaysOriginal) 
+0

Kann ich dann ändern sie auch die Tönung der mittleren Taste aus, anders zu sein 'self.tabBar.tintColor = UIColor (rot: 0/255 , grün: 150/255, blau: 175/255, alpha: 1.0) 'gefällt einem' UIwhiteColor'? –

+0

Ich habe meine Antwort aktualisiert Bitte schauen Sie. – Benbobo

+0

Hallo, danke für die Antwort, aber du vermisst mich verstanden. Ich habe darüber gesprochen, die Farbe des Icons zu ändern. In Ihrem Beispiel oben sind alle Symbole in Ihrer Registerkarte weiß. Ich habe versucht zu fragen, wie ich einen bestimmten (wie den mittleren) auf eine andere Farbe als die anderen Icons setzen könnte. –

Verwandte Themen