iOS - Globally change navigation bar title color using appearance?

前端 未结 6 1714
情歌与酒
情歌与酒 2021-02-07 00:56

This crashes the app:

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

Is there a way to do

相关标签:
6条回答
  • 2021-02-07 01:40

    This worked:

    NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], UITextAttributeTextColor, [UIColor whiteColor], UITextAttributeTextShadowColor, nil];
    [[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
    
    0 讨论(0)
  • 2021-02-07 01:42

    I used following code to change the title bar's color.

    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];
    
    0 讨论(0)
  • That crashes the app before UINavigationBar doesn't have a title or state... Those are UIButton methods

    You need

    [[UINavigationBar appearance] setTintColor:[UIColor darkGrayColor]];
    
    0 讨论(0)
  • 2021-02-07 01:49

    Using modern syntax and code that actually runs, this is how to globally style your UINavigationBar title text:

    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 }];
    

    Note: NSShadow's shadowBlurRadius property is not respected.

    Note: Shadows are so iOS 6. Don't ever use them.

    0 讨论(0)
  • 2021-02-07 01:54

    Here's an example of how to do this in Swift:

    UINavigationBar.appearance().titleTextAttributes =
      [NSFontAttributeName:UIFont(name:"Exo2-Bold", size: 18) as! AnyObject,
      NSForegroundColorAttributeName:UIColor.whiteColor()]
    
    0 讨论(0)
  • 2021-02-07 02:03

    The @RyJ answer is great and worked for me. Thought I'd chip in that there's a good tutorial on this in Ray Wenderlich's site, titled (excuse the pun):

    User Interface Customization in iOS 6

    See the section Customizing UINavigationBar

    Here's the code snippet for the navigation bar title, to change globally:

    // 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]];
    

    One other minor point is that it seems there's a default shadow on the title bar, so to get rid of it, you can't just remove the attribute. Instead you have to set a shadow offset:

    UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0, 0)]
    
    0 讨论(0)
提交回复
热议问题