UITabBar和UITabBarItem与特定的图像@ 2x的iPhone 5和iPhone 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):
它真正伟大的作品时,你可以在iPhone 6上运行:
但是,当在iPhone 5上测试它时,选择该项目时,UITabBarItem区域将扩展为相同的150像素(与图像宽度相同)inst的EAD减少至128像素(它想有这样的尺寸,以适应iPhone 5),你可以看到:
(注意,从第一项到例如第二项的宽度差,但它发生在所有他们似乎选定的图像覆盖在UITabBarItem)
我的@ 2x图像有150px,但因为我应该使用@ 2x图像为iPhone 5和6,我如何处理这种情况下适合图像UITabBarItem?它似乎只会有效,如果我有一个图像150像素(6)和另一个图像128像素(5)
是否有任何解决方案使用相同的@ 2x图像或我需要编码来识别屏幕大小和然后选择哪个图像?
同样的问题:
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英寸图像。
2014年11月22日提问,仍然没有答案? – myexec 2015-01-11 18:51:07
@Fernando对此有何强有力的解决方案?我也面临同样的问题:http://stackoverflow.com/questions/30460648/remove-mask-from-deselected-tabs-uitabbaritem-swift/30462346#30462346 – Bonnke 2015-05-26 21:07:55
@Bonnke不幸的是我找不到一个很好的解决方案,所以远,我的解决方法(它的耻辱)是非常类似于下面的答案,检查屏幕大小,然后选择正确的图像: -/ – Fernando 2015-05-28 05:56:25