How to change the font and text color of the title of UINavigationBar

前端 未结 6 666
滥情空心
滥情空心 2021-01-07 18:05

I want to be change the font of the title to Avenir, and I want to make it white. Here is my code in the viewDidLoad method:

UINavigationBar.app         


        
相关标签:
6条回答
  • 2021-01-07 18:12

    If you want the styles to be applied through out the whole app add these lines in the AppDelegate.m file.

    NSShadow* shadow = [NSShadow new]; 
    shadow.shadowOffset = CGSizeMake(0.0f, 0.0f); 
    shadow.shadowColor = [UIColor blackColor]; 
    
    [[UINavigationBar appearance] setTitleTextAttributes: @{
    NSForegroundColorAttributeName: [UIColor whiteColor],
    NSFontAttributeName: [UIFont fontWithName:@"Kelvetica Nobis" size:20.0f],
    NSShadowAttributeName: shadow 
    }];
    

    NSForegroundColorAttributeName sets the Font color.

    NSFontAttributeName sets a custom font face to the title text.

    NSShadowAttributeName applies a nice shadow effect to the text, you can remove this part if you want.

    Also in advance, you can add these line to hide the text that comes up in back button in action bar when you navigate to another view within the navigation controller.

    [[UIBarButtonItem appearance]
         setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000)
         forBarMetrics:UIBarMetricsDefault];
    

    Hope this help your question :)

    0 讨论(0)
  • 2021-01-07 18:13

    In Swift 5:

    let appearance = UINavigationBarAppearance()
        appearance.titleTextAttributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white,
            NSAttributedString.Key.font: UIFont(name: "Avenir", size: 20)!]
        appearance.largeTitleTextAttributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white,
            NSAttributedString.Key.font: UIFont(name: "Avenir", size: 35)!]
    

    Code here are for Title and Large title. you can also remove custom font if you want system font.

    0 讨论(0)
  • 2021-01-07 18:14

    Your code is OK you just need to set all of titleTextAttributes in one line:

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white , NSFontAttributeName: UIFont(name: "Avenir", size: 17)!]
    
    0 讨论(0)
  • 2021-01-07 18:18

    In case someone needs this in Swift 4:

    let navBarAppearance = UINavigationBar.appearance()
    navBarAppearance.barTintColor = .red
    navBarAppearance.tintColor = .white
    navBarAppearance.titleTextAttributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white,
            NSAttributedString.Key.font: UIFont(name: "Avenir", size: 20)!]
    
    0 讨论(0)
  • 2021-01-07 18:24

    I use this:

    Update, it seems this is needed as well:

        self.navigationController?.navigationBar.barStyle       = UIBarStyle.Black // I then set the color using:
    
        self.navigationController?.navigationBar.barTintColor   = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0) // a lovely red
    
        self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() // for titles, buttons, etc.
    
        let navigationTitleFont = UIFont(name: "Avenir", size: 20)!
    
        self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: navigationTitleFont]
    
    0 讨论(0)
  • 2021-01-07 18:29

    I would just create an outlet and do this:

    @IBOutlet weak var navigationBar: UINavigationBar!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
        navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir", size: 30)!]
    }
    
    0 讨论(0)
提交回复
热议问题