Pracuję nad nową aplikacją i mam pewne problemy, aby dostosować UITabBar i sprawić, by działał (projekt) świetnie w iPhone 5 i 6 przy użyciu @ 2x obraz.UITabBar i UITabBarItem z określonym obrazem @ 2x dla iPhone 5 i iPhone 6
W AppDelegate.m w sposobie didFinishLaunchingWithOptions, ustawić obrazy dla tła, poz wybrany:
//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]];
a następnie w ten sam sposób dla każdej pozycji ustawić obraz i wstawka:
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]];
Mój problem jest związany iPhone 5 i 6 szer stosując tę samą @ 2x obraz, jak iPhone 5 ma 640 (320pts) oraz iPhone 6 ma 750px (375pts), więc decydują się stworzyć selectedIndicatorImage nazwie „ [email protected] "o szerokości rozmiar = 150px
Bo mam 5 UITabBarItem, więc 750/5 = 150px (każda pozycja)
[email protected] obrazu (150px x x 96 pikseli):
To działa naprawdę świetnie, kiedy uruchom na iPhonie 6, jak widzisz:
Ale kiedy przetestować go na iPhone 5, gdy element jest wybrany, obszar UITabBarItem jest rozszerzony o tę samą 150px (jak szerokość obrazu) inst ead of reduce to 128px (prawdopodobnie ma taki rozmiar, aby zmieścił się na iPhonie 5), jak widać:
(zauważ różnicę szerokości od pierwszej pozycji do drugiej pozycji, ale zdarza się to wszystkim im, wydaje się, że wybrany obraz nakłada się na UITabBarItem)
Obraz My @ 2x ma 150 pikseli, ale ponieważ mam używać 2x obrazów dla iPhone'a 5 i 6, jak mogę obsłużyć ten przypadek, aby dopasować obraz do UITabBarItem? Wygląda na to, że zadziała tylko wtedy, gdy mam jeden obraz 150px (dla 6) i inny obraz 128px (dla 5)
Czy są jakieś rozwiązania wykorzystujące ten sam obraz 2x lub muszę kodować, aby zidentyfikować rozmiar ekranu i a następnie wybrać, który obraz?
Zapytany na 22 listopada 14 i wciąż nie ma odpowiedzi ??? – myexec
@Fernando Jakieś mocne rozwiązanie z tym? Mam również ten sam problem: http://stackoverflow.com/questions/30460648/remove-mask-from-deselected-tabs-uitabbaritem-swift/30462346#30462346 – Bonnke
@Bonnke niestety nie mogłem znaleźć świetnego rozwiązania, więc daleko, moje obejście (wstyd) jest bardzo podobne do odpowiedzi poniżej, sprawdzanie rozmiaru ekranu, a następnie wybór odpowiedniego obrazu: -/ – Fernando