iOS 13系统的字体是什么?
在iOS 13之前,我使用SFUIDisplay字体。
UIFont(name:".SFUIDisplay-Light",size:UIFont.systemFontSize)
但在iOS 13上,它不起作用了。
iOS 13系统的字体是什么?
在iOS 13之前,我使用SFUIDisplay字体。
UIFont(name:".SFUIDisplay-Light",size:UIFont.systemFontSize)
但在iOS 13上,它不起作用了。
这个bug太扯了。唯一解决方法是直接使用systemFont(ofSize:weight:)
方法。也就是说,你不能使用UIFont(name:size:)
来获取系统字体,因为你会得到Times New Roman字体,原因很有趣。可能是苹果公司的开发人员在跟我们开玩笑。所以,对于上面的原始问题,你必须使用以下方法:
UIFont(systemFont:UIFont.systemFontSize, weight: .light)
对于我的情况,我在制作一个针对UIFont
的扩展程序时遇到了这个错误,该程序需要以不同的字体大小返回相同的字体,并且必须与自定义和系统字体一起使用。为了使其适用于xcode 11 ios 13,我不得不添加一个傻瓜式的检查来查看fontName
是否包含“.SF”。
extension UIFont {
func forSize(_ pointSize: CGFloat) -> UIFont {
if !fontName.contains(".SF"), let font = UIFont(name: fontName, size: pointSize) {
return font
}
return UIFont.systemFont(ofSize: pointSize, weight: weight)
}
}
如果你打算使用系统字体,你不需要担心它的名称,应该让系统自动处理。
let font = UIFont.systemFont(ofSize: UIFont.systemFontSize)
在这个点上,无论系统字体如何更改,它都将自动更新。
此外
我使用很多自定义字体。我需要这样做。
实际上,如果您想使用系统字体,可以不提及字体名称来完成。例如,您可以实现一个返回正确字体的函数:
func getFont(name: String = "", size: CGFloat = UIFont.systemFontSize) -> UIFont {
// system font
let defaultFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
if name.isEmpty {
return defaultFont
}
return UIFont(name: name, size: size) ?? defaultFont
}
如果要使用系统字体,请调用 getFont()
。否则,需在调用时指定字体名称:getFont(name: ".SFUIDisplay-Light")
。
不过,您可以通过以下方式获取系统字体名称并使用它:
let systemFontName = UIFont.systemFont(ofSize: UIFont.systemFontSize).fontName
getFont(name: systemFontName)
UIFont.systemFont
会自动检测系统字体名称,无需指定。字体族:".SFCompactText-Regular";字重:普通;字形:普通
使用systemFont(ofSize: CGFloat) -> UIFont
创建字体。
然后获取该字体的fontName
和familyName
。
打印上述内容,即可得出当前iOS的答案;在iOS 13上运行它。