Как сменить шрифт во всем приложении на custom/кастомный/пользовательский swift/xcode?

Иногда нужно сменить шрифт во всем приложении сразу на определенный, для этого можно воспользоваться следующим методом

Добавляем в AppDelegate.swift

в раздел

  func application(_ application: UIApplication, didFinishLaunchingWithOptions

  UIFont.overrideInitialize()

Создаем файл Extension swift.

import UIKit

struct AppFontName {

static let regular = «Bahnschrift» //Тут имя нашего шрифта

}

extension UIFontDescriptor.AttributeName {

static let nsctFontUIUsage =

UIFontDescriptor.AttributeName(rawValue: «NSCTFontUIUsageAttribute»)

}

extension UIFont {

@objc class func mySystemFont(ofSize size: CGFloat) -> UIFont {

return UIFont(name: AppFontName.regular, size: size)!

}

@objc convenience init(myCoder aDecoder: NSCoder) {

if let fontDescriptor = aDecoder.decodeObject(forKey: «UIFontDescriptor») as? UIFontDescriptor {

let fontName = AppFontName.regular

self.init(name: fontName, size: fontDescriptor.pointSize)!

} else {

self.init(myCoder: aDecoder)

}

}

class func overrideInitialize() {

if self == UIFont.self {

let systemFontMethod = class_getClassMethod(self, #selector(systemFont(ofSize:)))

let mySystemFontMethod = class_getClassMethod(self, #selector(mySystemFont(ofSize:)))

method_exchangeImplementations(systemFontMethod!, mySystemFontMethod!)

let initCoderMethod = class_getInstanceMethod(self, #selector(UIFontDescriptor.init(coder:))) // Trick to get over the lack of UIFont.init(coder:))

let myInitCoderMethod = class_getInstanceMethod(self, #selector(UIFont.init(myCoder:)))

method_exchangeImplementations(initCoderMethod!, myInitCoderMethod!)

}

}

}

 

в Info.plist добавляем ключ

Как сменить шрифт во всем приложении на custom/кастомный/пользовательский swift/xcode?