Ios 更改导航栏标题字体-swift

Ios 更改导航栏标题字体-swift,ios,swift,navigationbar,Ios,Swift,Navigationbar,我的导航栏中有一个标题,我想将其更改为自定义字体。我已经找到了这行代码,但它是为当你有一个导航控制器 self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "LeagueGothic-Regular", size: 16.0)!,

我的导航栏中有一个标题,我想将其更改为自定义字体。我已经找到了这行代码,但它是为当你有一个导航控制器

self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "LeagueGothic-Regular", size: 16.0)!, 
                                                             NSForegroundColorAttributeName: UIColor.whiteColor()]
但我没有任何导航控制器。我将导航栏手动添加到我的视图中

如何更改注释字体?

尝试以下操作:

目标-C

[[UINavigationBar appearance] setTitleTextAttributes:attrsDictionary];
Swift 3

self.navigationController.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "CaviarDreams", size: 20)!]
Swift 4

self.navigationController.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "CaviarDreams", size: 20)!]

如何在Swift中为每个视图控制器设置字体的正确方法(使用外观代理):

Swift 5(和4.2) 斯威夫特4 斯威夫特3
要在对导航栏的引用上调用titleTextAttributes,请使用:

let attributes = [NSAttributedStringKey.font: UIFont(name: "Helvetica", size: 17)!]
self.navigationController?.navigationBar.titleTextAttributes = attributes

SWIFT 4.x

let navigation = UINavigationBar.appearance()

let navigationFont = UIFont(name: "Custom_Font_Name", size: 20)
let navigationLargeFont = UIFont(name: "Custom_Font_Name", size: 34) //34 is Large Title size by default

navigation.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationFont!]

if #available(iOS 11, *){
    navigation.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationLargeFont!]
}
在iOS 11.x上更改普通和大标题的导航栏标题字体

let navigation = UINavigationBar.appearance()

let navigationFont = UIFont(name: "Custom_Font_Name", size: 20)
let navigationLargeFont = UIFont(name: "Custom_Font_Name", size: 34) //34 is Large Title size by default

navigation.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationFont!]

if #available(iOS 11, *){
    navigation.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: navigationLargeFont!]
}

大标题必须在导航栏中设置为真。

您也可以在故事板中这样做,Xcode 10.1中有一个错误,这也是克服这个问题的一个技巧

 self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Lato-Semibold", size: 17)!,NSAttributedStringKey.foregroundColor : UIColor.white]
步骤1-从字体中选择系统

第2步-然后再次选择“自定义”,它将显示所有字体。

import UIKit

class NavigationController: UINavigationController
{
    // MARK: Navigation Controller Life Cycle

    override func viewDidLoad()
    {
       super.viewDidLoad()
       setFont()
    }

    // MARK: Methods

    func setFont()
    {
       // set font for title
       self.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 20)!]
    
       // set font for navigation bar buttons
       UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 15)!], for: UIControl.State.normal)
    }
}

Swift 4.2 Xcode 10

self.navigationController!.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "Sacramento-Regular", size: 19)!]
捷径5捷径

//Programatically
self.navigationController!.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Helvetica Neue", size: 40)!]
身体上

Swift 5 我将向您展示我们如何在公司项目中做到这一点。

import UIKit

class NavigationController: UINavigationController
{
    // MARK: Navigation Controller Life Cycle

    override func viewDidLoad()
    {
       super.viewDidLoad()
       setFont()
    }

    // MARK: Methods

    func setFont()
    {
       // set font for title
       self.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 20)!]
    
       // set font for navigation bar buttons
       UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 15)!], for: UIControl.State.normal)
    }
}
  • 我们创建一个
    UINavigationController
    子类
  • viewDidLoad
    中编写自定义代码
  • 使故事板文件中的每个导航控制器都继承 从它
  • 这非常好,原因不止一个。其中一个原因是变化的中心点。一旦我们在类中更改了某些内容,所有导航控制器都会侦听它

    这就是我们的
    UINavigationController
    子类的外观。

    import UIKit
    
    class NavigationController: UINavigationController
    {
        // MARK: Navigation Controller Life Cycle
    
        override func viewDidLoad()
        {
           super.viewDidLoad()
           setFont()
        }
    
        // MARK: Methods
    
        func setFont()
        {
           // set font for title
           self.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 20)!]
        
           // set font for navigation bar buttons
           UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 15)!], for: UIControl.State.normal)
        }
    }
    
    从工作项目复制粘贴。

    import UIKit
    
    class NavigationController: UINavigationController
    {
        // MARK: Navigation Controller Life Cycle
    
        override func viewDidLoad()
        {
           super.viewDidLoad()
           setFont()
        }
    
        // MARK: Methods
    
        func setFont()
        {
           // set font for title
           self.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 20)!]
        
           // set font for navigation bar buttons
           UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.font: UIFont(name: "Al-Jazeera-Arabic", size: 15)!], for: UIControl.State.normal)
        }
    }
    
    斯威夫特5
    在导航栏的参考上调用
    titleTextAttributes
    。为了澄清这个答案,
    fontname
    应该是
    UIFont
    类型,而不仅仅是字符串形式的字体名称。是的,例如让font=UIFont(名称:“Lato Light.ttf”,大小:34)@Davidwilliamesactly:)虽然它是“Lato Light”而不是“Lato Light.tff”:但请注意,这个答案会影响所有导航条,而不仅仅是这个特定导航条。我得到了这个错误。无法将“UIFont”类型的值分配给类型[字符串:任意]?虽然这个代码片段可以解决这个问题,但它确实有助于提高你文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!即使在
    Xcode 10.2.1
    中,这种变通方法也有效(或必需)。谢谢,它在界面生成器中生效,但在模拟器中运行时导航栏不会显示字体更改。对于iOS 13及以上版本,请使用
    UINavigationBarAppearance()
    ,请参阅