22

这会使应用程序崩溃:

[[UINavigationBar appearance] setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal];

有没有办法使用外观来做到这一点?

4

7 回答 7

66

这有效:

NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, nil];
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
于 2012-06-12T21:21:11.570 回答
4

以下是如何在 Swift 中执行此操作的示例:

UINavigationBar.appearance().titleTextAttributes =
  [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,
  NSForegroundColorAttributeName:UIColor.whiteColor()]
于 2015-09-15T11:38:57.853 回答
3

在 UINavigationBar 没有标题或状态之前使应用程序崩溃......这些是 UIButton 方法

你需要

[[UINavigationBar appearance] setTintColor:[UIColor darkGrayColor]];
于 2012-06-12T20:55:57.370 回答
2

@RyJ 的答案很棒,对我有用。我想我会在 Ray Wenderlich 的网站上有一个很好的教程,标题为(请原谅双关语):

iOS 6 中的用户界面自定义

请参阅自定义 UINavigationBar部分

这是导航栏标题的代码片段,可以全局更改:

// Customize the title text for *all* UINavigationBars
[[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
  UITextAttributeTextColor,
  [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],
  UITextAttributeTextShadowColor,
  [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
  UITextAttributeTextShadowOffset,
  [UIFont fontWithName:@"Arial-Bold" size:0.0],
  UITextAttributeFont,
  nil]];

另一个小问题是标题栏上似乎有一个默认阴影,所以要摆脱它,你不能只删除该属性。相反,您必须设置阴影偏移:

UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0, 0)]
于 2013-07-18T08:18:53.753 回答
2

适用于 iOS 15

let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = <PREFERRED BACKGROUND COLOR>
appearance.titleTextAttributes = [.foregroundColor : <PREFERRED TITLE COLOR>]
navigationBar.tintColor = <PREFERED TINT COLOR> //for bar buttons
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
于 2021-11-18T15:11:55.980 回答
0

我使用以下代码更改标题栏的颜色。

NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor blackColor];
shadow.shadowOffset = CGSizeMake(1, 0);

NSDictionary *titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:shadow};

[[UINavigationBar appearance] setTitleTextAttributes:titleTextAttributes];
于 2015-06-27T20:20:01.563 回答
0

使用实际运行的现代语法和代码,这是如何全局设置UINavigationBar标题文本的样式:

NSShadow *navigationBarTitleShadow = [[NSShadow alloc] init];
navigationBarTitleShadow.shadowColor = [UIColor colorWithWhite:0.5
                                                         alpha:0.5];
navigationBarTitleShadow.shadowOffset = CGSizeMake(2.0, 2.0);
[[UINavigationBar appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blackColor],
                                                        NSFontAttributeName : [UIFont fontWithName:@"Arial-BoldMT"
                                                                                              size:30.0],
                                                        NSShadowAttributeName : navigationBarTitleShadow }];

注意:NSShadowshadowBlurRadius属性不受尊重。

注意:阴影是如此 iOS 6。永远不要使用它们。

于 2015-09-18T23:14:40.293 回答