iOS:为啥自定义标签栏项目仅显示为灰色轮廓?
Posted
技术标签:
【中文标题】iOS:为啥自定义标签栏项目仅显示为灰色轮廓?【英文标题】:iOS: Why is custom tab bar item showing only as grey silhouette?iOS:为什么自定义标签栏项目仅显示为灰色轮廓? 【发布时间】:2015-08-04 09:40:09 【问题描述】:我正在尝试使用自定义 *.png 文件设置我的 UITabBarController 的标签栏图标(一个用于选定的文件,一个用于未选定的文件)。
图像都是非交错 png 格式,并且在 *.imageset 中正确命名(@2x、@3x 等)。
但标签栏项目仅显示为这样的轮廓:
我尝试在 Interface Builder 中设置这些图像,但没有成功。然后我还尝试在 MyTabBarController(扩展 UITabBarController)的“loadView”函数中以编程方式设置它们,如下所示:
UIImage *selectedImage;
UIImage *unselectedImage;
// tab1
selectedImage = [UIImage imageNamed:@"cmdGamesActive"];
unselectedImage = [UIImage imageNamed:@"cmdGamesInactive"];
UITabBarItem *item1 = [self.tabBar.items objectAtIndex:0];
item1 = [item1 initWithTitle:@"Games" image:unselectedImage selectedImage:selectedImage];
// tab2
selectedImage = [UIImage imageNamed:@"cmdFriendsActive"];
unselectedImage = [UIImage imageNamed:@"cmdFriendsInactive"];
UITabBarItem *item2 = [self.tabBar.items objectAtIndex:1];
item2 = [item2 initWithTitle:@"Friends" image:unselectedImage selectedImage:selectedImage];
// tab3
selectedImage = [UIImage imageNamed:@"cmdTrophiesActive"];
unselectedImage = [UIImage imageNamed:@"cmdTrophiesInactive"];
UITabBarItem *item3 = [self.tabBar.items objectAtIndex:2];
item3 = [item3 initWithTitle:@"Trophies" image:unselectedImage selectedImage:selectedImage];
// tab4
selectedImage = [UIImage imageNamed:@"cmdSettingsActive"];
unselectedImage = [UIImage imageNamed:@"cmdSettingsInactive"];
UITabBarItem *item4 = [self.tabBar.items objectAtIndex:3];
item4 = [item4 initWithTitle:@"Settings" image:unselectedImage selectedImage:selectedImage];
...结果相同。
任何想法如何解决这个问题?
【问题讨论】:
完成图片名称尝试在最后添加.png。 @Samraan Khaan:谢谢,但这没有帮助。有趣的是,它适用于另一张仅具有透明度和一些白色的图像。但是我的图标非常丰富多彩......还有什么想法吗? @cookiemonsta:新的 ios SDK 似乎无法做到这一点……仅支持选中时着色的黑白图像。 啊,糟了!谢谢你的更新:) @cookiemonsta:看看这个线程。它描述了与标签栏项目非常相似的问题。 ***.com/questions/19372269/… 【参考方案1】:根据this answer,我做了一些额外的事情,并且在这里为您提供了答案。我有我的自定义 UITabBarController,它在 StoryBoard 文件中与我的 UITabBarController 链接。因此,为了在未选择 TabBar 时移除 iOS 提供的自动色调,我最终以这种方式将其移除。图像可以是各种各样的图像,但只是以recommended here 的方式。就是这样:
NSArray *navConArr = self.viewControllers;//self is custom UITabBarController
UINavigationController *naviOne = [navConArr objectAtIndex:0];//I have 3 different tabs, objectAtIndex:0 means the first tab navigation controller
UITabBarItem *naviBtn = naviOne.tabBarItem;
UIImage *image = [[UIImage imageNamed:@"iconNaviOne"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[naviBtn setSelectedImage:image];
[naviBtn setImage:image];
谢天谢地,这就像一个魅力(:
【讨论】:
【参考方案2】:我遇到了类似的问题。 我为标签选择了几个图标,例如“麦克风”、“笑脸”和“设置”。
但是当我执行程序时,唯一可见的东西是灰色和蓝色方块。
我将我的“.png”图像修改为透明的,现在它们可以按预期显示。
即,确保用于选项卡图标的图像没有背景。
【讨论】:
【参考方案3】:这应该可以解决问题:
UITabBarItem *item0 = [_tabBar.items objectAtIndex:0];
item0.image = [[UIImage imageNamed:@"edit_profile_tab"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item0.selectedImage = [[UIImage imageNamed:@"edit_profile_tab_active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
【讨论】:
以上是关于iOS:为啥自定义标签栏项目仅显示为灰色轮廓?的主要内容,如果未能解决你的问题,请参考以下文章