【问题标题】:How to change UITabBar Selection color如何更改 UITabBar 选择颜色
【发布时间】:2010-10-21 21:40:12
【问题描述】:

我需要将 UITabBar 的选择颜色从默认的蓝色更改为红色。我们如何做到这一点。

【问题讨论】:

    标签: ios iphone objective-c cocoa-touch uitabbar


    【解决方案1】:

    2017 年 9 月更新: 我写这个答案已经两年了,因为它经常收到支持,我应该说这可能是这个问题的最糟糕的答案,它容易出错,可能由于 iOS 更新而中断,难以调试等。 ,所以请不要做我写的事情并应用更好的解决方案,例如子类化 UITabBar 或 UITabBarController。谢谢。

    您可以通过为您的 UITabBar 设置“tintColor”属性(键路径)来做到这一点。

    1. 在文档大纲中选择 UITabBar。 (不是带有黄色图标的控制器。)
    2. 在实用程序区域中选择身份检查器。
    3. 单击“用户定义的运行时属性”中的 +。
    4. 添加“颜色”类型的“tintColor”键路径和您想要的颜色。

    应该这样做。您可以对照下面的屏幕截图进行检查。

    更多信息: UITabBar 的 Identity Inspector 中有一个“Tint”属性,我相信它会做同样的事情,但显然,它什么也没做。它的默认值是选择 UITabBarItem 时的确切默认填充颜色,所以我猜它会在稳定版本 Xcode 7 中修复。手指交叉。

    【讨论】:

    • 你也可以在 xcode 6 上这样做,很好的答案,这应该是解决方案
    • 在 xcode 7 的官方版本中似乎还没有解决这个问题 - 这个答案让我有些头疼,谢谢!
    【解决方案2】:

    在 IOS5 中,UITabBar 有一个 selectedImageTintColor 属性,可以满足您的需要。

    【讨论】:

    • @KPM,我看到它已被弃用,但我们应该改用什么?这仍然适用于 iOS 8,物有所值。
    【解决方案3】:

    在 iOS 7 中,它只是 tintColor。实现此目的的一种方法是继承 UITabBarViewController,在情节提要中设置自定义类,然后在子类 tabBarVC 的 viewDidLoad 方法中添加:

    [[self tabBar] setTintColor:[UIColor redColor]];
    

    【讨论】:

    • 我经常作为我自己:“为什么我必须为改变颜色这样的小事创建一个子类?”。好问题,为什么 f* 不简单地从父视图自动继承 tintColor ?为什么界面生成器设置不执行任何操作?
    • 如何在ios 8中使用SelectedImageTintColor
    • [self.tabBarController.tabBar setTintColor:[UIColor redColor]];也可以解决问题。
    • 如果你想为未选择的文本设置颜色,它是unselectedItemTintColor
    【解决方案4】:

    要达到上述结果,请执行以下步骤。

    第一步:Assets.xcassets中添加你想要的图片,并确保他们Render AsDefault

    第2步:选择你的UITabBar对象并设置Image Tint颜色,这个颜色将被选中标签颜色

    第三步:选择UITabBar对象并添加Key PathunselectedItemTintColorTypeColor用户定义的运行时属性中的Choose color for unselected item

    全部完成。

    【讨论】:

    • 点赞兄弟!!
    【解决方案5】:

    非常简单

    创建一个 UITabBarController 的自定义类,并在 -(void)viewDidLoad 方法中添加这一行:

    [[self tabBar] setSelectedImageTintColor:[UIColor greenColor]]; 
    

    【讨论】:

    • 但这会改变文本的颜色,而不是整个选择区域。有什么方法可以实现吗?
    【解决方案6】:

    因为 UITextAttributeTextColor 在 iOS 7 中已被弃用,你应该使用:

    [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal];    
    [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected];
    

    【讨论】:

      【解决方案7】:

      从 iOS 8 开始,就这么简单:

      UITabBar.appearance().tintColor = UIColor.redColor()
      

      【讨论】:

        【解决方案8】:

        只需在 Interface Builder 中为 TabBar 更改以下属性

        显然在我的情况下它是白色的。

        【讨论】:

          【解决方案9】:

          SDK 并不容易,但技术上 是可行的。 Apple 显然认为这是他们对一致外观和感觉的愿景的一部分。

          UITabBar 是 UIView 的子类。你总是可以继承并实现你自己的-drawRect:

          这不是一项简单的任务,但是,您必须从头开始重新实现该类,否则可能会产生一些奇怪的副作用。

          【讨论】:

            【解决方案10】:

            Swift 5 编程

            在 Swift 5 中这很容易。

            在您的TabBarController 中写下:

            tintColor = UIColor.red  
            

            就是这样

            【讨论】:

              【解决方案11】:

              我一直在寻找一种方法来设置 UITabBarItem 的选定文本颜色,并找到了一个非常简单的方法,使用 UIAppearance 协议。

              [UITabBarItem.appearance setTitleTextAttributes:@{
                      UITextAttributeTextColor : [UIColor greenColor] } forState:UIControlStateNormal];
              
              [UITabBarItem.appearance setTitleTextAttributes:@{
                      UITextAttributeTextColor : [UIColor purpleColor] }     forState:UIControlStateSelected];
              

              请原谅可怕的颜色!

              【讨论】:

              • UITextAttributeTextColor 已弃用。有什么选择?
              • 我认为是NSForegroundColorAttributeName
              【解决方案12】:

              iOS 5.0 修复了此问题,但该解决方案受保密协议约束。在您的文档中查找 UITabBar 以获得一种简单的方法来做您想做的事情。

              【讨论】:

                【解决方案13】:

                我找到了最简单的解决方案 -

                1. 在标签栏控制器中选择标签栏

                2. 设置图像色调

                3. 设置色调

                参考图片见附件。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-02-25
                  • 2012-07-15
                  • 1970-01-01
                  • 2015-06-03
                  • 1970-01-01
                  • 2015-02-11
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多