30

我正在使用 UIAppearance 将字体应用于 UINavigationBar 和 UIBarButtonItem,但我遇到了问题。我运行了这段代码:

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] 
setTitleTextAttributes:
@{NSFontAttributeName : [UIFont fontWithName:@"My_Font" size:17.0]} 
forState:UIControlStateNormal];

NSLog(@"%@", [[UIBarButtonItem appearanceWhenContainedIn:
[UIToolbar class], nil] titleTextAttributesForState:UIControlStateNormal]);

在 iOS 7 上登录的结果是:

(null)

iOS 6 中的结果是:

{
    NSFont = "<UICFFont: 0x1d897a80> font-family: \"My_Font\"; font-weight: normal; font-style: normal; font-size: 17px";
}

我在 iOS 7 文档中找不到任何表明这不应该工作的东西,还有其他人有这个问题吗?

编辑 1

我实际上已经解决了[UINavigationBar appearance]这个问题,我将点大小设置为 0,以便将字体设置为默认的 navbar/barButtonItem 大小,如NSString UIKit Additions Reference中所述,但这显然不再适用iOS 7. 相反,将磅值设置为 0 将返回系统字体。

我仍然无法设置titleTextAttributes

[UIBarButtonItem appearanceWhenContaintedIn:[UIToolbar class], nil]]

4

7 回答 7

49
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont 
    fontWithName:@"YOURFONT" size:14], NSFontAttributeName, 
    [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

关键是使用 NSFontAttributeName 等等。我假设他们正在转向使用 NS 品种来实现 64 位兼容性。上面的代码在我的 iOS7 设备上运行。

于 2013-09-19T23:14:44.210 回答
18

遵循@Alex Zavatone 的回答 - 只需一行代码就可以很好地完成:

self.navBar.titleTextAttributes = @{
    NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0], 
    NSForegroundColorAttributeName: [UIColor redColor]
};
于 2014-03-05T12:39:29.893 回答
11

当我将它移动到我的视图控制器中的 viewDidLoad 方法时,这对 iOS 7 工作得很好。

[[UIBarButtonItem appearance] setTitleTextAttributes:attributes];

当我尝试在 AppDelegate 中执行此操作时,它不起作用,但[[UINavigationBar appearance] setTitleTextAttributes:setTitleTextAttributes:attributes];在 AppDelegate 中运行良好。它也应该在您创建和分配栏按钮之前进行。

如果您在 Storyboard 上创建条形按钮,它也适用于 initWithCoder 方法。

更新: 如果您将部署目标更改为 7.0,则 Xcode 将向您提供警告,例如 UITextAttributeTextColor 已弃用,您应该使用 NSForegroundColorAttributeName 或使用 NSFontAttributeName 代替 UITextAttributeFont。更改属性常量后,您可以从 AppDelegate 调用 setTitleTextAttributes:。

于 2013-09-21T20:32:59.607 回答
9

这是我在 iOS-7 上所做的

UIColor *red = [UIColor colorWithRed:165.0f/255.0f green:1.0f/255.0f blue:0.0f/255.0f alpha:1.0];
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Light" size:24.0f];

NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:font forKey:NSFontAttributeName];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];

self.navBar.titleTextAttributes = navBarTextAttributes;
于 2013-12-19T15:21:51.007 回答
8

这是在斯威夫特:

let font = UIFont(name: "My_Font", size: 17.0)
UINavigationBar.appearance().titleTextAttributes = [
    NSForegroundColorAttributeName: UIColor.whiteColor(),
    NSFontAttributeName: font!
]

*请注意,您必须打开可选的 UIFont。

于 2015-05-01T23:01:26.637 回答
5

对于 UIBarButons 使用外观代理

 NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                      [UIFont fontWithName:@"Helvetica Neue" size:fontSize], UITextAttributeFont,
                                      nil];
    [[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes                                                                                                   
                                                forState:UIControlStateNormal];

如果您想限制您的样式影响哪些 UIBarButtonItems,请使用 appearanceWhenContainedIn: 代替。

对于 UINavigationBar,您可以创建一个 UILabel 并将其设置为您的 navigationItem.titleView:

UIabel *title = [[UILabel alloc] initWithFrame:CGRectZero];
title.backgroundColor = [UIColor clearColor];
title.font = [*yourfont*];
title.textColor = [*your color*];
self.navigationItem.titleView = title;
于 2013-09-19T15:36:38.213 回答
1

以下是如何在 Swift 4 中全局更改导航栏标题的文本颜色:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.yellow]
于 2017-07-18T14:37:18.353 回答