2014-11-22 74 views
6

我正在開發一個新的應用程序,我面臨一些問題來定製UITabBar並使其工作(設計)偉大的iPhone 5和6使用@ 2倍圖像。UITabBar和UITabBarItem與特定的圖像@ 2x的iPhone 5和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]]; 

然後,在相同的方法中,我設置圖像和插圖每個Item:

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,並使用相同的@ 2倍的圖像6寬度,因爲iPhone 5有640像素(320pts)和iPhone 6有750px(375pts),所以我決定創建一個名爲selectedIndicatorImage「 [email protected]「的寬度大小= 150px

因爲我有5 UITabBarItem,所以5分之750= 150像素(每個項目)

圖片[email protected](150像素X 96PX):

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

它真正偉大的作品時,你可以在iPhone 6上運行: enter image description here

但是,當在iPhone 5上測試它時,選擇該項目時,UITabBarItem區域將擴展爲相同的150像素(與圖像寬度相同)inst的EAD減少至128像素(它想有這樣的尺寸,以適應iPhone 5),你可以看到: enter image description here

(注意,從第一項到例如第二項的寬度差,但它發生在所有他們似乎選定的圖像覆蓋在UITabBarItem)

我的@ 2x圖像有150px,但因爲我應該使用@ 2x圖像爲iPhone 5和6,我如何處理這種情況下適合圖像UITabBarItem?它似乎只會有效,如果我有一個圖像150像素(6)和另一個圖像128像素(5)

是否有任何解決方案使用相同的@ 2x圖像或我需要編碼來識別屏幕大小和然後選擇哪個圖像?

+3

2014年11月22日提問,仍然沒有答案? – myexec 2015-01-11 18:51:07

+0

@Fernando對此有何強有力的解決方案?我也面臨同樣的問題:http://stackoverflow.com/questions/30460648/remove-mask-from-deselected-tabs-uitabbaritem-swift/30462346#30462346 – Bonnke 2015-05-26 21:07:55

+0

@Bonnke不幸的是我找不到一個很好的解決方案,所以遠,我的解決方法(它的恥辱)是非常類似於下面的答案,檢查屏幕大小,然後選擇正確的圖像: -/ – Fernando 2015-05-28 05:56:25

回答

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") 
} 

在工具類:

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

編輯:

上面的代碼工作,但最好的解決辦法是遵循一個。

進入Images.xcssets - >您的圖像 - >屬性檢查器 - >在設備部分選擇設備特定部分 - >選擇Retina 4英寸並拖放4英寸圖像。