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:为啥自定义标签栏项目仅显示为灰色轮廓?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 自定义标签栏项目比标签栏高

在标签栏中设置自定义图标以突出显示/未突出显示

为自定义 UITabBarItem 着色

更改标签栏中活动整个部分的颜色 - iOS 7

自定义标签栏应用 ipad 隐藏标签栏

标签栏项目图像不显示 - xcode 6 [关闭]