如何删除选中时覆盖 UITabBarItem 的蓝色方块?
Posted
技术标签:
【中文标题】如何删除选中时覆盖 UITabBarItem 的蓝色方块?【英文标题】:How can I remove the blue square that overlays UITabBarItem when selected? 【发布时间】:2014-08-10 00:37:47 【问题描述】:我有一个 iPad 应用程序(Xcode 5、ios 7、ARC 和 Storyboards)。我有一个UITabBarController
,每个场景都有一个UITabBarItem
。
当我点击一个标签栏项目时,它会转到正确的场景,但“当前”标签栏项目图像被一个“蓝色框”覆盖。
如何用不同的图像替换那个“蓝框”? (我不想改变颜色;我想用不同的图像替换它)。
【问题讨论】:
你是如何创建标签栏项目的?您是否添加了图片和/或文字? 使用 XCode 5 故事板;拖放(这是最简单的方法)...在 Storyboard 中添加图像和文本。 【参考方案1】:您用于标签栏项目的图像必须有它们的renderingMode
、UIImageRenderingModeAlwaysOriginal
,否则它们将显示为蓝色方块(模板)。名为“Tab Bars”的文档是这样说的,
标签栏项目图标
标签栏中的每个项目都可以有一个自定义的选定图像和未选定图像 图片。您可以在初始化选项卡栏项目时指定这些图像 使用 initWithTitle:image:selectedImage: 方法。请注意,一个选项卡 栏项图像将自动呈现为模板图像 在选项卡栏中,除非您明确将其呈现模式设置为 UIImageRenderingModeAlwaysOriginal。有关详细信息,请参阅模板 图片。
我不认为你可以在故事板中设置它们,所以你应该在控制器的 init 方法中进行设置,
-(id)initWithCoder:(NSCoder *)aDecoder
if (self = [super initWithCoder:aDecoder])
UIImage *img = [UIImage imageNamed:@"pic.jpg"];
img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
[self.tabBarItem setSelectedImage:img];
return self;
【讨论】:
@spokane-dude,如果未选择的图像适合您,您真的只需要执行 setSelectedImage: 我提供的代码的一部分(我更新了另一部分)。你试过吗?我仍然不确定您是如何从 IB 获得未选择的图像的——如果我在那里设置图像,我只会得到一个与我的图像大小相同的灰色方块。 可以只在storyboard里做,只要把它们放在透明背景上,就不会变成蓝色方块了。【参考方案2】:这是一个 Xcode 错误,将在 8.2 版本中修复。这是 Apple 官方关于这个问题的说明。查看 Interface Builder > Resolved Issues > UITabBarController https://developer.apple.com/library/prerelease/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html的链接
【讨论】:
【参考方案3】:Swift 3+ 版本的rdelmar's code:
class CustomTabBarController: UITabBarController
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
let img = UIImage(imageLiteralResourceName: "pic").withRenderingMode(.alwaysOriginal)
tabBarItem.selectedImage = img
【讨论】:
以上是关于如何删除选中时覆盖 UITabBarItem 的蓝色方块?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 在 iOS 中创建类似于标签栏选择动画的 LinkedIn?