swift - 如何使用字体名称加载 iOS 13 默认字体?
问题描述
我对 iOS 13 系统字体有一个奇怪的问题。我正在尝试使用字体名称加载 iOS 默认字体 San Francisco。但由于一些 iOS 错误,它正在加载一些其他字体,如 Times New Roman。我在这里和这里看到了一些这样的问题。但在我的情况下,我必须加载带有名称的字体,因为我正在使用实用程序类在应用程序委托中全局设置字体名称。有没有办法在 iOS 13 中使用字体名称加载系统字体?
// Set font here
MUIConstats.shared.defaultFontRegularName = UIFont.systemFont(ofSize: 17).fontName
// Get font from here
class func appFontRegularOf(size: CGFloat)-> UIFont{
if let fontName = MUIConstats.shared.defaultFontRegularName {
return UIFont(name:fontName, size: size) ?? UIFont.systemFont(ofSize:size)
}else{
return UIFont.systemFont(ofSize:size)
}
}
解决方案
您可以存储非系统字体的名称,但如果它是系统字体,那么您唯一可以存储的就是它是系统字体这一事实。这是工会的绝佳机会:
enum WhatFont {
case system
case name(String)
func fontOfSize(_ sz:CGFloat) -> UIFont? {
switch self {
case .system: return UIFont.systemFont(ofSize: sz)
case .name(let name): return UIFont(name: name, size: sz)
}
}
}
测试它:
let f1 = WhatFont.system
print(f1.fontOfSize(17))
let f2 = WhatFont.name("Georgia")
print(f2.fontOfSize(17))
推荐阅读
- windows - Logback 翻转一次并停止翻转(windows with tomcat)
- python-requests - 使用带有嵌套 subdictionary.RobotFrameowork 的字典向服务端点发布请求
- python - 在 Python 状态事件中杀死一个线程
- vb.net - 将字符串从 vb.net 传递到 cmd
- c# - 如何在 PopBackStack() 函数上设置动画?
- sql - 组合数组大查询
- azure - Azure KeyVault 机密读取/Azure CLI 限制 (Ansible)
- node.js - 节点 PDFKit 管道到多个目标
- javascript - 如何解决谷歌语音 API“返回空白结果”问题?
- qt5 - QTreeView 复选框颜色