画面上の要素のカスタムフォントを設定するには、単にdosomeLabel.font=UIFont(name: "Exo 2.0", size: 15)
できることを知っています。
私はSwiftを使用してアプリ全体にどのように設定できるのか疑問に思っていました。 (ハックは、アプリのすべての要素について私が知っていることを行うことですが、それは保守性の悪夢になります)
この質問はすでにObjective-Cタグで尋ねられていることがわかります サイズを指定せずにiOSアプリ全体にカスタムフォントを設定する方法 Swiftへのコード
UILabelおよびその他のUIViewの外観を設定できます。
UILabel.appearance().font = UIFont(name: "yourFont", size: yourSize)
より一般的な:
AnyUIView.appearance().font = UIFont(name: "yourFont", size: yourSize)
より詳細な答えとして、これらの利点を備えた拡張機能の使用をお勧めします。
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)
}
}
}
拡張機能を使用するためのサンプル:
例えばこれらの行を開始コントローラー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
追伸@Christianが言及したように、ほとんどAnyUIViewの独自の拡張機能を書くことができます
最終的にこれを理解しました。私が見つけることができる最もきれいな方法。 (Swift 4)ソリューションでは、フォントサイズを設定する必要がなく、すべてのフォントサイズを上書きしません。
UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFontTextStyle(rawValue: "Roboto"))
このコードを配置する場所を探している人向け。 AppDelegate.Swiftファイル内に配置します
func application(_ application: UIApplication,
didFinishLaunchingWithOptions...
Swift 4.2
UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFont.TextStyle(rawValue: "Roboto"))
Swift 4 with iOS 11で同じことを行う方法を見つけました
変数名の前に@objc
キーワードのみを追加する必要があります。したがって、変数宣言は次のようになります
@objc public var substituteFontName : String {
get {}
set {}
}
これがこの問題に直面している他の人を助けることを願っています。