17

在此处输入图像描述

如何更改标签栏中“更多..”文本的颜色以匹配其图标颜色。(现在在标签栏中选择了性能)

我试图设置 TitleTextAttributes。

[moreItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor yellowColor],NSForegroundColorAttributeName , nil]

但它的文本颜色始终设置为黄色。即使选择了该项目。像这样 在此处输入图像描述

我试图在选择时设置为白色,而在未选择时它应该与图标颜色匹配。谢谢..任何建议都会非常有帮助。

4

12 回答 12

53

接受的答案的代码对我不起作用。

这是有效的代码:

    [[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor yellowColor] }
                                             forState:UIControlStateNormal];
    [[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
                                             forState:UIControlStateSelected];
于 2014-05-15T07:16:08.453 回答
18

我找到了自己问题的答案。

我们可以设置perforamceItem setTitleTextAttributes:两种不同的状态。

  • forState:UIControlStateNormal
  • forState:UIControlStateHighlighted

我添加了以下代码

 [performanceItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor yellowColor], NSForegroundColorAttributeName,nil] forState:UIControlStateNormal];

[performanceItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaLTStd-Roman" size:10.0f], NSFontAttributeName,  [UIColor whiteColor], NSForegroundColorAttributeName,nil] forState:UIControlStateHighlighted];

我需要用我的图标颜色替换黄色。这就是他们现在的样子。

选择更多时

选择更多时

选择性能时

选择性能时

于 2013-09-09T04:32:04.070 回答
9

斯威夫特 5.1 + iOS 12.4 和 iOS 13

/// Subclass of `UITabBarController` that is used to set certain text colors for tab bar items.
class TabBarController: UITabBarController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if let items = tabBar.items {
            // Setting the title text color of all tab bar items:
            for item in items {
                item.setTitleTextAttributes([.foregroundColor: UIColor.black], for: .selected)
                item.setTitleTextAttributes([.foregroundColor: UIColor.lightGray], for: .normal)
            }
        }
    }
}
于 2019-08-23T08:21:51.023 回答
8

无需代码的方式来做到这一点:

如果您只是使用 iOS 10,那么您可以更改标签栏中的图像色调

在此处输入图像描述

如果您还支持 iOS 9 及更低版本,那么您还必须将 tintColor 添加到每个选项卡栏项中的用户定义器运行时属性

在此处输入图像描述

如果您还想更改图标颜色,请确保您的资产文件夹中有正确的彩色图像并将渲染更改为原始图像

在此处输入图像描述

于 2016-10-28T16:52:59.440 回答
6

这是快速版本:-

        for item in self.mainTabBar.items! {

          let unselectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
          let selectedItem: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()]
          item.setTitleTextAttributes(unselectedItem as? [String : AnyObject], forState: .Normal)
          item.setTitleTextAttributes(selectedItem as? [String : AnyObject], forState: .Selected)

        }

或者您可以简单地更改 Appdelegate :-

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blueColor()], forState: .Selected)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: .Normal)
    // Override point for customization after application launch.
    return true
}
于 2015-11-02T04:50:26.477 回答
3

斯威夫特 4:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor : UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor : UIColor.red], for: .selected)
于 2018-03-26T11:21:29.290 回答
2

对于一个快速的解决方案,让类型推断成为你的朋友:

override func viewWillAppear(animated: Bool) {
  for item in self.tabBar.items! {
    let unselectedItem = [NSForegroundColorAttributeName: UIColor.blackColor()]
    let selectedItem = [NSForegroundColorAttributeName: UIColor.whiteColor()]

    item.setTitleTextAttributes(unselectedItem, forState: .Normal)
    item.setTitleTextAttributes(selectedItem, forState: .Selected)
  }
}
于 2015-11-12T18:48:45.740 回答
2

@skywinder 的 Swift 版本回答:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Selected)
于 2016-08-30T23:06:54.280 回答
1

这很简单,只需子类化 UITabBarItem 并将其分配为情节提要或代码中的标签栏项目的类。以下内容对我来说非常适合。

import UIKit

class PPTabBarItem: UITabBarItem {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    override init() {
        super.init()
        commonInit()
    }

    func commonInit() {
        self.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:UIColor.blackColor()], forState: UIControlState.Normal)

        self.setTitleTextAttributes([NSFontAttributeName: UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:UIColor.yellowColor()], forState: UIControlState.Selected)
    }
}

skywinder 的解决方案很好,但它会触发全局范围。

于 2016-03-22T08:33:24.110 回答
0

这工作正常..

 [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                        [UIColor redColor], NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateSelected];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor blackColor], NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateNormal];
于 2017-06-08T11:00:35.860 回答
0

现在,如果您的应用支持低于 13 的 iOS 版本,您应该以不同的方式设置此颜色:

if #available(iOS 13, *) {
    let appearance = UITabBarAppearance()
    appearance.stackedLayoutAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: .red]
    tabBar.standardAppearance = appearance
} else {
    UITabBarItem.appearance().setTitleTextAttributes(UIColor.red, for: UIControl.State.selected)
}

在代码示例中,我为 UITabBarItem 的选定状态设置了红色文本颜色,您可能还需要更改正常状态的文本颜色。

于 2020-04-23T17:44:32.997 回答
-1

这在 Swift 5 上对我有用。

在 AppDelegate 中:

 UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.red], for: .selected)
于 2019-05-28T03:05:36.743 回答