我知道要在屏幕上设置元素的自定义字体,我可以做到someLabel.font=UIFont(name: "Exo 2.0", size: 15).
我想知道如何使用swift为整个应用程序设置它.(一个hack就是对应用程序的每个元素做我所知道的但这只是一个可维护性的噩梦)
我看到这个问题已经被问到了一个Objective-C标签,如何在不指定大小的情况下为整个iOS应用程序设置自定义字体但我对Objective-C不够熟悉,足以将代码移植到swift
Chr*_*örz 32
您可以设置UILabel和其他UIViews的外观:
UILabel.appearance().font = UIFont(name: "yourFont", size: yourSize)
Run Code Online (Sandbox Code Playgroud)
更多一般:
AnyUIView.appearance().font = UIFont(name: "yourFont", size: yourSize)
Run Code Online (Sandbox Code Playgroud)
Mos*_*ani 17
作为更详细的答案和这些好处,我建议使用扩展:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用扩展程序的示例:
例如,将这些行放在启动控制器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
Run Code Online (Sandbox Code Playgroud)
正如@Christian所提到的那样,你可以为几乎AnyUIView编写自己的扩展
终于明白了这一点。我能找到的最干净的方法。(Swift 4) 解决方案不需要您设置字体大小,也不会覆盖所有字体大小。
UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFontTextStyle(rawValue: "Roboto"))
Run Code Online (Sandbox Code Playgroud)
对于那些寻找放置此代码的位置的人。我把它放在我的 AppDelegate.swift 文件中
func application(_ application: UIApplication,
didFinishLaunchingWithOptions...
Run Code Online (Sandbox Code Playgroud)
斯威夫特 4.2
UILabel.appearance().font = UIFont.preferredFont(forTextStyle: UIFont.TextStyle(rawValue: "Roboto"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21632 次 |
| 最近记录: |