iOS更改导航栏标题的字体和颜色


101

所以我有应该更改导航栏标题字体的这段代码,但是确实

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

使用此代码更改后退按钮字体效果很好。

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];

Answers:


251

更改标题字体(和颜色)的正确方法是:

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

编辑:Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

编辑:斯威夫特4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

斯威夫特3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]

2
无论我尝试使用什么值,大小均保持不变
Raphael Royer-Rivard

1
是的,我意识到我的字体没有正确加载。仍然不知道为什么,我以相同的方式导入了OpenSans-Light和OpenSans-Regular,只有OpenSans-Light似乎可以使用...
Raphael Royer-Rivard 2015年

1
Obj-C代码缺少右括号。它应该是:[self.navigationController.navigationBar setTitleTextAttributes:@ {NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont fontWithName:@“ mplus-1c-regular” size:21]}]];
Dylan Hand

转到更改backBarButton字体的链接:stackoverflow.com/a/16538596/5967144
soorej babu

使用LargeTitle导航栏怎么办?navigationBar.LargeTitleTextAttributes在这方面,我没有找到任何东西。您知道如何全局设置LargeTitle字体吗?
iKK

54

其他答案没有错。我只是分享用于设置字体的情节提要版本。

1.在导航控制器中选择导航栏

导航栏

2.在属性检查器中更改标题字体

标题字体

(在Xcode选择新字体之前,您可能需要切换导航栏的Bar Tint)

注释(注意事项)

验证此功能在Xcode 7.1.1+上有效。(请参见下面的示例

  1. 您确实需要在字体生效之前切换导航栏的色调(似乎就像Xcode中的错误;您可以将其切换回默认值,并且字体会保留下来)
  2. 如果选择系统字体,请确保大小不为0.0(否则,新字体将被忽略)

尺寸

  1. 当视图层次结构中只有一个NavBar时,这样的工作似乎没有问题。似乎同一堆栈中的辅助NavBar被忽略。(请注意,如果显示主导航控制器的navBar,则所有其他自定义navBar设置都将被忽略)。

陷阱(双层)

其中一些重复出现,这意味着它们很可能值得注意。

  1. 有时情节提要XML损坏。这要求您以情节提要作为源代码模式查看结构(右键单击情节提要文件>“另存为...”)
  2. 在某些情况下,与用户定义的运行时属性关联的navigationItem标记被设置为视图标记的xml子代,而不是视图控制器标记。如果是这样,请将其从标签之间移除以进行正确操作。
  3. 切换NavBar色调以确保使用了自定义字体。
  4. 验证字体的大小参数,除非使用动态字体样式
  5. 视图层次结构将覆盖设置。似乎每个堆栈可以使用一种字体。

结果

导航斜体

样品

处理自定义字体

注意〜可以在Code With Chris网站上找到一个不错的清单,您可以看到示例下载项目。

如果您拥有自己的字体,并希望在情节提要中使用该字体,那么下面的SO Question会有一套不错的答案。一个答案确定了这些步骤。

  1. 获取自定义字体文件(.ttf,.ttc)
  2. 将字体文件导入您的Xcode项目
  3. 在app-info.plist中,添加一个由应用程序提供的名为Fonts的键。它是一个数组类型,将所有字体文件名添加到数组中,注意:包括文件扩展名。
  4. 在情节提要中的导航栏上,转到“属性”检查器,单击“字体”选择区域的右图标按钮。在弹出面板中,选择“自定义字体”,然后选择嵌入字体名称的“族”。

自定义字体解决方法

因此,Xcode自然看起来可以处理UINavigationItem上的自定义字体,但是该功能只是无法正确更新(所选字体被忽略)。

UINavigationItem

要解决此问题:

一种方法是使用情节提要进行修复并添加一行代码:首先将一个UIView(UIButton,UILabel或其他一些UIView子类)添加到视图控制器(不是Navigation Item ... Xcode当前不允许这样做)那)。添加控件后,您可以在情节提要中修改字体,并将引用添加为View Controller的插座。只需将该视图分配给UINavigationItem.titleView。您也可以根据需要在代码中设置文本名称。已报告错误(23600285)。

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

21

试试这个:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

14

我用于更改导航栏标题的Swift代码:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

而且,如果您也想更改背景字体,则可以在AppDelegate中使用它:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

8

在您的应用程序代表中添加此单行代码-完成了Lauch。它将在整个应用程序中更改字体,导航栏的颜色。

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

5

这是您的问题的答案:

将代码移至以下方法,因为导航栏标题在加载视图后更新。我试图在viewDidLoad中添加以上代码无效,但在viewDidAppear方法中工作正常。

  -(void)viewDidAppear:(BOOL)animated{}

3

任何人都需要Swift 3版本。redColor()已更改为red

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

2

使用文字更易读:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };

2

我有一个问题,因为当我尝试以编程方式更改我的NavigationItem标题时,我找不到我的字体(尝试了很多事情,但无法使其正确运行),所以我在情节提要中发现了一种非常不错的解决方法。

  1. 首先,在“导航项”下的中间一个视图中添加一个,不要忘记将backGroundColor设置为清除颜色,使其具有与navBar相同的颜色:

在此处输入图片说明

  1. 然后在此视图中添加一个可以编辑的标签(设置文本颜色,字体,大小...)
  2. 将约束添加到标签的“视图”和“居中文本”(顶部= 0,底部= 0,尾随= 0和前导= 0)

最后,您在文档大纲中应该有类似的内容:

在此处输入图片说明

在您的ViewController中是这样的:

在此处输入图片说明

希望能有所帮助。


2

迅速:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

1

这是Swift 4的替代品(已由@Josh回答):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

1

iOS 11

在此处输入图片说明

目标C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}

1

对于Objective-C设置字体和颜色

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

0

这是Swift 4的答案:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

不要忘记添加键的Raw值,以避免编译错误。

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

斯威夫特4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

0

添加此扩展

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

在viewDidLoad()中添加以下行

self.navigationController?.navigationBar.changeFont()

-1

在swift 3.0中工作要更改标题颜色,您需要添加titleTextAttributes这样的

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.