2014-11-22 9 views
6

मैं एक नई एप्लिकेशन को विकसित कर रहा हूँ और मैं UITabBar अनुकूलित और iPhone 5 और 6 का उपयोग करने में यह काम (डिजाइन) बनाने के महान करने के लिए कुछ समस्याओं का सामना कर रहा हूँ के साथ @ 2 एक्स छवि।UITabBar और UITabBarItem iPhone 5 के लिए विशिष्ट छवि @ 2x और iPhone 6

AppDelegate.m में, didFinishLaunchingWithOptions विधि में, मैं पृष्ठभूमि के लिए छवियों को निर्धारित करते हैं, आइटम का चयन किया:

//TABBAR 
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
UITabBar *tabBar = tabBarController.tabBar; 
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0]; 
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1]; 
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2]; 
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3]; 
UITabBarItem *tabBarItem5 = [tabBar.items objectAtIndex:4]; 

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tab_bg"]]; 
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"icone_home_selecionado"]]; 
[[UITabBar appearance] setShadowImage:[[UIImage alloc] init]]; 

और फिर, एक ही विधि में, प्रत्येक मद मैं छवि और इनसेट सेट के लिए:

tabBarItem1.title = nil; 
tabBarItem1.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
[tabBarItem1 setImage:[[UIImage imageNamed:@"icone_home_teste"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

tabBarItem2.title = nil; 
tabBarItem2.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
[tabBarItem2 setImage:[[UIImage imageNamed:@"icone_home_teste"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

tabBarItem3.title = nil; 
tabBarItem3.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
[tabBarItem3 setImage:[[UIImage imageNamed:@"icone_home_teste"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

tabBarItem4.title = nil; 
tabBarItem4.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
[tabBarItem4 setImage:[[UIImage imageNamed:@"icone_home_teste"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

tabBarItem5.title = nil; 
tabBarItem5.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0); 
[tabBarItem5 setImage:[[UIImage imageNamed:@"icone_home_teste"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 

मेरे समस्या iPhone 5 और 6 चौड़ाई एक ही @ 2x छवि का उपयोग कर से संबंधित है, iPhone 5 640px (320pts) के रूप में और iPhone 6 750px (375pts) है, तो मैं selectedIndicatorImage बुलाया बनाने का निर्णय " [email protected] "चौड़ाई आकार के साथ = 150px

क्योंकि मैं 5 UITabBarItem, है तो 750/5 = 150px (प्रत्येक आइटम)

छवि [email protected] (150px x 96px):

icone_home_selecionado@2x.png (150px x 96px)

यह वास्तव में महान काम करता है जब iPhone 6 पर चलने के रूप में कहां देख सकते हैं: enter image description here

लेकिन जब iPhone 5, जब आइटम का चयन किया UITabBarItem क्षेत्र में एक ही 150px के लिए विस्तार किया जाता है (के रूप में छवि चौड़ाई का है) पर यह परीक्षण Inst की EAD 128px को कम करने (यह लगता है के लिए इस आकार iPhone 5 पर फिट करने के लिए है) के रूप में आप देख सकते हैं: enter image description here

(ध्यान दें, उदाहरण के लिए दूसरे मद के लिए पहला आइटम से चौड़ाई अंतर है, लेकिन यह सब करने के लिए होता उन्हें लगता है कि चयनित छवि UITabBarItem को ओवरले करती है)

मेरी @ 2x छवि में 150px है, लेकिन जैसा कि मुझे आईफोन 5 और 6 के लिए @ 2x छवियों का उपयोग करना है, मैं इस मामले को छवि में फिट करने के लिए कैसे संभाल सकता हूं UITabBarItem? ऐसा लगता है कि यह केवल तभी काम करेगा जब मेरे पास एक छवि 150 पीएक्स (6 के लिए) और दूसरी छवि 128 पीएक्स (5 के लिए)

क्या एक ही @ 2x छवि का उपयोग करके कोई समाधान है या मुझे उस स्क्रीन आकार की पहचान करने के लिए कोड की आवश्यकता है और फिर कौन सी छवि का चयन करें?

+3

22 नवंबर 14 को पूछे गए और अभी भी कोई जवाब नहीं है ??? – myexec

+0

@Fernando इस के साथ कोई मजबूत समाधान? मुझे भी एक ही समस्या का सामना करना पड़ रहा है: http://stackoverflow.com/questions/30460648/remove-mask-from-deselected-tabs-uitabbaritem-swift/30462346#30462346 – Bonnke

+0

@ दुर्भाग्य से मुझे एक अच्छा समाधान नहीं मिला अब तक, मेरा कामकाज (इसकी शर्मिंदगी) नीचे दिए गए उत्तर के समान है, स्क्रीन आकार की जांच कर रहा है और फिर सही छवि का चयन कर रहा है: -/ – Fernando

उत्तर

0

एक ही समस्या के साथ:

UITabBar.appearance().backgroundImage = UIImage(named: "bg_bottom_menu") 

कारण छवि के लिए 4 इंच के लिए बस गए है इसे प्रदर्शित iPhone में ठीक से काम नहीं करता है 6.

मैं इसे ठीक करने के लिए अनुवर्ती कोड का उपयोग कर रहा:

if Utilities.isIphone5() { 
    UITabBar.appearance().backgroundImage = UIImage(named: "bg_bottom_menu_4_inches") 
} else { 
    UITabBar.appearance().backgroundImage = UIImage(named: "bg_bottom_menu") 
} 

utilties में:

class func isIphone5() -> Bool { 
    return isIphone() && UIScreen.mainScreen().bounds.size.height == 568.0 
} 

संपादित करें:

पिछले कोड काम करता है लेकिन सबसे अच्छा समाधान एक का पालन है।

images.xcssets में जाएं -> आपकी छवि -> विशेषता निरीक्षक -> डिवाइस अनुभाग के तहत विशिष्ट डिवाइस का चयन करें -> रेटिना 4-इंच का चयन करें और 4-इंच छवि खींचें और छोड़ें।

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