2015-03-14 3 views
16

में सक्रिय टैब बार आइटम का पृष्ठभूमि रंग सेट करें, यदि संभव हो तो मैं छवियों के उपयोग के बिना इसे पूरा करने की उम्मीद कर रहा हूं। छवि के रूप में प्रत्येक टैब को प्रस्तुत करने के बिना प्रोग्राम में दिखाए गए प्रभाव को बनाने का कोई तरीका है?स्विफ्ट

एसओ पर समीक्षा की गई प्रत्येक प्रश्न में जेपीजी के रूप में सहेजे गए टैब हैं, जो मुझे लगता है कि यह अधिक काम है।

कोई विचार? Tab Bar

उत्तर

42

मैंने @matcartmill पर एक समान दृष्टिकोण लिया लेकिन बिना किसी विशेष छवि की आवश्यकता के। यह समाधान सिर्फ आपके रंग पर आधारित है।

extension UIImage { 

    class func imageWithColor(color: UIColor, size: CGSize) -> UIImage { 
     let rect: CGRect = CGRectMake(0, 0, size.width, size.height) 
     UIGraphicsBeginImageContextWithOptions(size, false, 0) 
     color.setFill() 
     UIRectFill(rect) 
     let image: UIImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return image 
    } 

} 

मुझे आशा है कि इस मदद करता है:

// set red as selected background color 
let numberOfItems = CGFloat(tabBar.items!.count) 
let tabBarItemSize = CGSize(width: tabBar.frame.width/numberOfItems, height: tabBar.frame.height) 
tabBar.selectionIndicatorImage = UIImage.imageWithColor(UIColor.redColor(), size: tabBarItemSize).resizableImageWithCapInsets(UIEdgeInsetsZero) 

// remove default border 
tabBar.frame.size.width = self.view.frame.width + 4 
tabBar.frame.origin.x = -2 

मैं UIImage की निम्न एक्सटेंशन का इस्तेमाल कर रही है!

+1

शानदार! मुझे वास्तव में इस विधि का फिर से उपयोग करना पड़ा, इसलिए मैं इस पोस्ट पर वापस आया। यह मैंने देखा है कि यह करने का सबसे अच्छा तरीका है। – matcartmill

+1

बहुत बढ़िया ..... धन्यवाद –

+0

यह आईफोन 7 एस के लिए काम नहीं कर रहा है लेकिन आईफोन 5 एस के लिए काम क्यों कर रहा है? – kishor0011

3

तो यहां मैं क्या कर रहा हूं। यह 640x49 पीएनजी का उपयोग करने का मिश्रण है जो मुझे नीली "हाइलाइट" पृष्ठभूमि की आवश्यकता है।

AppDelegate.swift में:

var selectedBG = UIImage(named:"tab-selected-full")?.resizableImageWithCapInsets(UIEdgeInsetsMake(0, 0, 0, 0)) 
UITabBar.appearance().selectionIndicatorImage = selectedBG 

और फिर पहला दृश्य नियंत्रक लोड हो जाता है कि में, मेरे पास है:

tabBarController?.tabBar.frame.size.width = self.view.frame.width+4 
tabBarController?.tabBar.frame.origin.x = -2 

ऊपर दो पंक्तियों के लिए कारण यह है कि, डिफ़ॉल्ट रूप से, ऐप्पल में टैब बार के बाएं और दाएं किनारे और टैब बार आइटम के बीच 2px सीमा है।

उपर्युक्त में मैं बस टैब बार 4px चौड़ा बना देता हूं, और उसके बाद इसे ऑफसेट करता हूं ताकि बाईं ओर की सीमा सिर्फ दृश्य के बाहर आती है, इस प्रकार दाईं ओर की सीमा भी दृश्य के बाहर गिर जाएगी।

+1

'UIEdgeInsetsMake (0, 0, 0, 0)' 'को UIEdgeInsetsZero' मेरा मानना ​​है कि बराबर है। – stkent

10

अद्यतन स्विफ्ट के लिए 3:

let numberOfItems = CGFloat((tabBarController?.tabBar.items!.count)!) 

let tabBarItemSize = CGSize(width: (tabBarController?.tabBar.frame.width)!/numberOfItems, 
          height: (tabBarController?.tabBar.frame.height)!) 

tabBarController?.tabBar.selectionIndicatorImage 
    = UIImage.imageWithColor(color: UIColor.black, 
          size: tabBarItemSize).resizableImage(withCapInsets: .zero) 

tabBarController?.tabBar.frame.size.width = self.view.frame.width + 4 
tabBarController?.tabBar.frame.origin.x = -2 

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

यह अब आईओएस 11 में काम नहीं कर रहा है – ynamao