如何删除选中时覆盖 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】:

您用于标签栏项目的图像必须有它们的renderingModeUIImageRenderingModeAlwaysOriginal,否则它们将显示为蓝色方块(模板)。名为“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 的蓝色方块?的主要内容,如果未能解决你的问题,请参考以下文章

UItabBarItem 高亮状态图片

如何使用 Swift 在 iOS 中创建类似于标签栏选择动画的 LinkedIn?

NSImage Overlay/Mask Gradient 像 iOS

淘宝怎么找到嗨购严选赚钱的蓝海市场?

删除 UITabBarItem

如何重新创建 UITabBarItem 图像过滤器?