it-swarm.com.de

Benutzerdefinierte Schriftart für die gesamte iOS-App verwenden

Ich weiß, dass ich zum Festlegen einer benutzerdefinierten Schriftart eines Elements auf dem Bildschirm einfach someLabel.font=UIFont(name: "Exo 2.0", size: 15) tun kann. 

Ich habe mich gefragt, wie man es mit Swift für eine ganze App einstellen kann. (Ein Hack wäre, das zu tun, was ich für jedes einzelne Element der App weiß, aber das wird nur ein Albtraum für die Wartbarkeit.)

Ich sehe, dass diese Frage bereits mit einem Objective-C-Tag gestellt wurde, Wie kann ich eine benutzerdefinierte Schriftart für die gesamte iOS-App festlegen, ohne die Größe anzugeben aber ich bin nicht mit Objective-C genug vertraut, um den Code zu portieren Schnell

15
tawheed

Sie können das Erscheinungsbild des UILabels und anderer UIViews festlegen:

UILabel.appearance().font = UIFont(name: "yourFont", size: yourSize)

Allgemeiner:

AnyUIView.appearance().font = UIFont(name: "yourFont", size: yourSize)
28
Christian

Als ausführlichere Antwort und mit diesen Vorteilen empfehle ich die Verwendung von Erweiterungen: 

  • Keine Größenüberschreibung (was auch immer Sie in Designer festlegen, wird verwendet)
  • Kein Style-Override (Fett, Leicht, Mittel, UltraLight ist in meinem Code implementiert, Sie können ihn jedoch nach Bedarf anpassen)
import UIKit

extension UILabel {
    public 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 {
    public 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 {
    public 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)
        }
    }
}

Beispiele für die Verwendung von Erweiterungen:

z.B. Setzen Sie diese Zeilen in Ihren Startcontroller 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. Wie von @Christian erwähnt, können Sie für fast AnyUIView eigene Erweiterungen schreiben

11

ENDLICH das herausgefunden. Die sauberste Art, wie ich finden konnte. (Swift 4) Die Lösung erfordert nicht, dass Sie die Schriftgröße einstellen und überschreibt nicht alle Schriftgrößen.

  UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFontTextStyle(rawValue: "Roboto"))

Für diejenigen, die diesen Code suchen. Ich habe es in meiner AppDelegate.Swift-Datei in 

 func application(_ application: UIApplication, 
 didFinishLaunchingWithOptions...

Swift 4.2

 UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFont.TextStyle(rawValue: "Roboto"))
3
Rmalmoe

Ich habe einen Weg gefunden, dasselbe in Swift 4 mit iOS 11 zu tun

Sie müssen nur das @objc-Schlüsselwort vor dem Variablennamen ..__ hinzufügen. Die Variablendeklaration wird also so sein

@objc public var substituteFontName : String {
    get {}
    set {}
}

Ich hoffe, das hilft anderen, die mit diesem Problem konfrontiert sind.

1
Surjeet