2012-05-10 15 views
17

मुझे अपने कस्टम टैब बार के साथ कुछ अजीब व्यवहार मिल रहा है। प्रतीत होता है कि छवियों को गलत तरीके से गठबंधन किया गया है। यहाँ एक स्क्रीनशॉट (मैं अपने खुद के टैब बार पृष्ठभूमि को हटा दिया है मेरी समस्या को उजागर करने के) है:आईओएस 5 कस्टम टैब बार छवि लंबवत संरेखण

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
self.tabBarController.viewControllers = [NSArray arrayWithObjects:homeNavController, whatsOnNavController, mapNavController, infoNavController, nil]; 
self.tabBarController.delegate = self; 

// For iOS 5 only - custom tabs 
if ([self.tabBarController.tabBar respondsToSelector:@selector(selectedImageTintColor)]) 
{ 

    // Set the background images 
    //[[UITabBar appearance] setBackgroundImage: [UIImage imageNamed:@"nav_bg.png"]]; 
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"nav_over.png"]]; 

    [homeNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_home_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_home"]]; 
    [whatsOnNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_whats_on_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_whats_on"]]; 
    [mapNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_map_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_map"]]; 
    [infoNavController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"nav_info_over"] withFinishedUnselectedImage:[UIImage imageNamed:@"nav_info"]]; 

} 
:

screenshot

यहाँ कोड मैं प्रत्येक राज्य के लिए छवियों सेट करने के लिए उपयोग कर रहा हूँ है

मेरी सभी प्रतिस्थापन टैब छवियां सही ढंग से आकार में हैं (गैर-रेटिना संस्करणों के लिए 49 पिक्सल ऊंची और 80 पिक्सल चौड़ी)।

इस अजीब व्यवहार के कारण क्या हो सकता है?

--- अपडेट ---

यहाँ जगह में पृष्ठभूमि के साथ एक अद्यतन स्क्रीनशॉट है:

screenshot 2

उत्तर

2

ऐसा लगता है कि आप हमेशा एक TabItem के अंदर का पाठ करना चाहिए। अंतरिक्ष खाली पाठ द्वारा बनाया गया था।

+0

क्या आप कृपया "क्या आपको हमेशा एक टैबिटम के अंदर टेक्स्ट होना चाहिए" के बारे में स्पष्ट कर सकते हैं? उपरोक्त स्क्रीनशॉट से, ऐसा लगता है कि आपके पास टैबबार में पहले से टेक्स्ट था। –

+0

वह टेक्स्ट छवि का हिस्सा था इसलिए मैंने शीर्षक को केवल खाली स्ट्रिंग बनाने की कोशिश की। पाठ अपनी छवि के भाग के रूप में तैयार की है और आप इसे के शीर्ष पर अतिरिक्त टेक्स्ट नहीं करना चाहती – boz

+0

हैं, तो सिर्फ एक स्थान के साथ एक स्ट्रिंग के अंदर सेट: @ "", यह चाल है, क्योंकि यह एक खाली स्ट्रिंग नहीं है क्या करेंगे और यह नहीं दिखाएगा। – chrisben

-1

आप के बजाय परिभाषित फ्रेम के साथ एक subview के रूप में छवि में जोड़ते हैं, मदद कर सकते हैं तुम बाहर। Check this

थोड़ा छोटा छवियों का उपयोग करने का प्रयास करें, tabbar उन्हें पुनर्स्थानापन्न थोड़ा

+0

मैं माफी चाहता हूँ, लेकिन मैं नहीं दिख रहा है कि कैसे है कि मुझे मदद कर सकता है जाएगा - मैं मैं सिर्फ आईओएस 5.x को लक्षित कर रहा हूं। – boz

3

यह थोड़ा सा हैकिश लग सकता है लेकिन मेरा मानना ​​है कि यह एकमात्र तरीका है जिसे आप प्राप्त करना चाहते हैं: आपको केवल टैब बार समाप्त छवियों का उपयोग करने की आवश्यकता है, जिनमें पारदर्शी 11 पिक्सेल "शीर्ष पैडिंग" (रेटिना के लिए 22 पिक्सेल) हैं। तब आपकी छवियों को 60px (120px) उच्च होना चाहिए।

मेरा ऐप इस तकनीक का उपयोग करके ऐप स्टोर में बना, इसलिए आपको इसका उपयोग करने के लिए सुरक्षित होना चाहिए।

उम्मीद है कि यह मदद करता है!

+0

यह बहुत चालाक है - मैं इसे अपने अगले ऐप पर आज़माउंगा। जिस ऐप का मैं अपने प्रारंभिक प्रश्न में बात कर रहा था वह पहले से ही जी रहा है। – boz

+0

बस अपने टैबबार छवि पर अतिरिक्त शीर्ष पारदर्शी पैडिंग जोड़ना जारी रखें और इसे केंद्र संरेखित करना चाहिए। – shahil

3

यह एपीआई वास्तव में खराब दस्तावेज है।

आपका finishedSelectedImage एक आइकन ~ 30x30 पीएक्स होना चाहिए। यह टैब का सिर्फ आइकन हिस्सा है। यदि आप finishedSelectedImage बनाते हैं जो बहुत लंबा है, तो सिस्टम स्क्रीन के नीचे इसे सही नहीं रखेगा।

वैचारिक रूप से, आप एक पूर्ण-चौड़ाई, tabBar के लिए 49px उच्च backgroundImage, एक एकल टैब-चौड़ाई जोड़ने के लिए, 49px उच्च selectionIndicatorImage चयनित टैब के लिए पृष्ठभूमि छवि के रूप जो काम करता है, फिर प्रत्येक का दो संस्करणों को जोड़ने के साथ शुरू टैब का आइकन ~ 30x30 पीएक्स, finishedUnselectedImage और finishedSelectedImage

64

UIBarItem (UIBarButton आइटम इस वर्ग से विरासत में) पर एक संपत्ति है imageInsets

finishedSelectedImage के लिए पूरी ऊंचाई छवियों (49px) का उपयोग करने के लिए और finishedUnselectedImage आप इन छवि सन्निवेश वाली निर्धारित करने की आवश्यकता:

tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);

+0

यह मेरे लिए काम किया लेकिन केवल अचयनित छवियों के लिए। चयनित छवियों में शीर्ष पर एक काला रेखा है! किसी भी विचार किसी को pls? – user1006117

+0

एक आकर्षण की तरह काम किया। हालांकि 5,0, -5,0 अधिक केंद्र गठबंधन देखा। – Ansari

+1

वाह बहुत अच्छा काम करता है .... – svmrajesh

21

अब आप स्टोरीबोर्ड में इसे ठीक कर सकते हैं।स्टोरीबोर्ड आकार निरीक्षक छवि इनसेट समायोजन Storyboard Size Inspector for Tab Bar Item

टैब बार आइटम आप, समायोजित आकार इंस्पेक्टर खोलना चाहते हैं का चयन करें, और ऊपर और नीचे छवि Insets समायोजित करें। आप उन्हें एक ही राशि को समायोजित करने की जरूरत है या वे सिर्फ तोड़ो/अपने छवि को फैलाने (टॉप में तो 5, और -5 नीचे में)

संबंधित मुद्दे