2014-11-22 58 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英寸图像。