Using custom font for entire iOS app swift

前端 未结 5 1357
南方客
南方客 2020-11-29 04:48

I know that to set a custom font of an element on the screen I can simply dosomeLabel.font=UIFont(name: \"Exo 2.0\", size: 15).

I was wondering how one

5条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-29 05:13

    As a more detailed answer and with these benefits I recommend using extensions:

    • No size override (whatever you set in designer will be used)
    • No style override (Bold, Light, Medium, UltraLight is implemented in my code but you can customize it as you need)
    import UIKit
    
    extension UILabel {
        @objc var substituteFontName : String {
            get {
                return self.font.fontName;
            }
            set {
                let fontNameToTest = self.font.fontName.lowercased();
                var fontName = newValue;
                if fontNameToTest.range(of: "bold") != nil {
                    fontName += "-Bold";
                } else if fontNameToTest.range(of: "medium") != nil {
                    fontName += "-Medium";
                } else if fontNameToTest.range(of: "light") != nil {
                    fontName += "-Light";
                } else if fontNameToTest.range(of: "ultralight") != nil {
                    fontName += "-UltraLight";
                }
                self.font = UIFont(name: fontName, size: self.font.pointSize)
            }
        }
    }
    
    extension UITextView {
        @objc var substituteFontName : String {
            get {
                return self.font?.fontName ?? "";
            }
            set {
                let fontNameToTest = self.font?.fontName.lowercased() ?? "";
                var fontName = newValue;
                if fontNameToTest.range(of: "bold") != nil {
                    fontName += "-Bold";
                } else if fontNameToTest.range(of: "medium") != nil {
                    fontName += "-Medium";
                } else if fontNameToTest.range(of: "light") != nil {
                    fontName += "-Light";
                } else if fontNameToTest.range(of: "ultralight") != nil {
                    fontName += "-UltraLight";
                }
                self.font = UIFont(name: fontName, size: self.font?.pointSize ?? 17)
            }
        }
    }
    
    extension UITextField {
        @objc var substituteFontName : String {
            get {
                return self.font?.fontName ?? "";
            }
            set {
                let fontNameToTest = self.font?.fontName.lowercased() ?? "";
                var fontName = newValue;
                if fontNameToTest.range(of: "bold") != nil {
                    fontName += "-Bold";
                } else if fontNameToTest.range(of: "medium") != nil {
                    fontName += "-Medium";
                } else if fontNameToTest.range(of: "light") != nil {
                    fontName += "-Light";
                } else if fontNameToTest.range(of: "ultralight") != nil {
                    fontName += "-UltraLight";
                }
                self.font = UIFont(name: fontName, size: self.font?.pointSize ?? 17)
            }
        }
    }
    

    Samples for using Extensions:

    e.g. put these lines in your starting controller viewDidLoad

    UILabel.appearance().substituteFontName = "IRANSans"; // USE YOUR FONT NAME INSTEAD
    UITextView.appearance().substituteFontName = "IRANSans"; // USE YOUR FONT NAME INSTEAD
    UITextField.appearance().substituteFontName = "IRANSans"; // USE YOUR FONT NAME INSTEAD
    

    P.S. as @Christian mentioned, you can write your own extensions for almost AnyUIView

提交回复
热议问题