目录
一、iOS-UI Kit 和 SwiftUI全局修改字体方案
方法 1:使用 appearance() 批量设置控件默认字体
方法 2:Swizzle 系统控件,彻底全局替换字体(高级用法)
5. UILabel/UIButton/TextView 是否正确设置字体

一、iOS-UI Kit 和 SwiftUI全局修改字体方案
下面是针对 UIKit 和 SwiftUI 的两种整体解决方案(代码段),确保能正确生效。
1.UIKit:全局修改字体方案
方法 1:使用 appearance() 批量设置控件默认字体
放在 AppDelegate 或 SceneDelegate 中的 didFinishLaunchingWithOptions:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let customFont = UIFont(name: "YourFontName-Regular", size: 17) {
UILabel.appearance().font = customFont
UIButton.appearance().titleLabel?.font = customFont
UITextField.appearance().font = customFont
UITextView.appearance().font = customFont
UINavigationBar.appearance().titleTextAttributes = [.font: customFont]
UIBarButtonItem.appearance().setTitleTextAttributes([.font: customFont], for: .normal)
}
return true
}
📌 注意事项:
"YourFontName-Regular"要换成字体内部名称,不是文件名!只对“之后创建的控件”生效,建议在
AppDelegate初始化前设置好 UI。部分控件如
UIAlertController无法通过appearance()修改。
方法 2:Swizzle 系统控件,彻底全局替换字体(高级用法)
你可以通过 Method Swizzling 替换 UILabel、UIButton 等控件的 init 方法,在初始化时统一字体。需要谨慎使用,适合自定义库或大型项目。
如果你需要,我可以为你提供 Swizzling 的完整代码模板。
2.SwiftUI:全局修改字体方案
方法 1:自定义环境字体并应用到全局视图
@main
struct YourApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.font, .custom("YourFontName-Regular", size: 17))
}
}
}
方法 2:封装一个 ViewModifier,全局复用
struct CustomFontModifier: ViewModifier {
func body(content: Content) -> some View {
content.font(.custom("YourFontName-Regular", size: 17))
}
}
extension View {
func useCustomFont() -> some View {
self.modifier(CustomFontModifier())
}
}
然后在 ContentView 中统一使用:
var body: some View {
VStack {
Text("Hello")
Text("World")
}
.useCustomFont()
}
3.如何确认字体名没错?
在代码中打印字体名,确认是否可用:
for family in UIFont.familyNames {
print("Family: \(family)")
for font in UIFont.fontNames(forFamilyName: family) {
print(" Font: \(font)")
}
}
二、iOS软件开发,批量更改字体文件未生效
在 iOS 软件开发中,如果尝试批量更改字体文件但未生效,通常可以从以下几个方面排查问题:
1. 字体文件是否正确导入
-
确保你已经将
.ttf或.otf字体文件添加到了 Xcode 项目中,并勾选了 "Target Membership"。 -
确保字体文件没有重命名(系统识别字体是根据内部 PostScript 名称而非文件名)。
2. info.plist 配置是否正确
你必须在 Info.plist 中添加字体名称,格式如下:
<key>UIAppFonts</key>
<array>
<string>PingFang-SC-Regular.ttf</string>
<string>MyCustomFont-Bold.otf</string>
</array>
注意: 这里的字符串应该是文件名,区分大小写。
3. 字体名是否正确获取
即使你导入了字体文件,系统使用的是“字体内部名称”,你可以通过以下代码打印出你能用的字体名:
for familyName in UIFont.familyNames {
print("Family: \(familyName)")
for fontName in UIFont.fontNames(forFamilyName: familyName) {
print(" Font: \(fontName)")
}
}
然后你需要用这个 fontName 去初始化 UIFont:
let customFont = UIFont(name: "MyCustomFont-Bold", size: 16)
4. 是否已经清除缓存/编译问题
-
清除 DerivedData:
-
Xcode -> Preferences -> Locations -> DerivedData -> 删除项目缓存
-
-
重新 Clean Build:
-
Shift + Command + K
-
-
重启模拟器或设备,有些字体在真机才生效。
5. UILabel/UIButton/TextView 是否正确设置字体
确保你已经将字体设置到了对应控件上,例如:
label.font = UIFont(name: "MyCustomFont-Regular", size: 17)
如果使用 appearance() 批量修改,例如:
UILabel.appearance().font = UIFont(name: "MyCustomFont-Regular", size: 17)
需要注意 appearance() 只对之后创建的控件生效,对已存在的控件不影响。
6. 使用 SwiftUI 时的注意事项
在 SwiftUI 中使用自定义字体需调用 .font(.custom(...)):
Text("Hello World")
.font(.custom("MyCustomFont-Bold", size: 20))
7. 字体是否支持当前语言字符集
有些字体不支持中文或特殊符号,会回退系统字体(尤其是非英文字体)。
扩展阅读:
| APKPure 发布指南:开发者与运营的安卓应用高效分发策略 | APKPure 发布指南:开发者与运营的安卓应用高效分发策略 |
| iOS App 字体全局替换方案及问题排查指南 | iOS App 字体全局替换方案及问题排查指南 |
| Google Play 应用发布清单:Android App 上线完整指南 | Google Play 应用发布清单:Android App 上线完整指南 |
| iOS App Store 上架清单:iPhone 和 iPad 应用发布完整指南 | iOS App Store 上架清单:iPhone 和 iPad 应用发布完整指南 |
60

被折叠的 条评论
为什么被折叠?



