iOS13的系统字体是什么?

10

iOS 13系统的字体是什么?

在iOS 13之前,我使用SFUIDisplay字体。

UIFont(name:".SFUIDisplay-Light",size:UIFont.systemFontSize)

但在iOS 13上,它不起作用了。


2
请勿提供使用系统字体的名称 - Lu_
我使用了很多自定义字体。我需要这样做。 - Vladislav
尝试获取该字体的fontName和familyName,然后检查您是否正在调用当前字体名称。 - A.Munzer
1
你是想在代码中实现这个功能,还是想要当前系统字体,但它明天可能就过时了?你可以从问题中删除Swift标签,或编辑问题以表明你想要一种获取代码中当前字体的方法,而不知道它是什么。 - user5306470
5个回答

6

这个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)
    }
}

3

如果你打算使用系统字体,你不需要担心它的名称,应该让系统自动处理。

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会自动检测系统字体名称,无需指定。

1

字体族:".SFCompactText-Regular";字重:普通;字形:普通


2
硬编码这个是不好的做法。此外,@Vladislav 正在要求代码,所以这个答案是无效的。也许你想要重新审视一下对其他答案的批评性评论? - meaning-matters
1
我只是指出他并不是在问代码是否好。显然,他不应该硬编码,但最终的问题是系统字体的名称是什么。你在纠正他的代码和意图方面做得太多了。 - mskw

1

-1

使用systemFont(ofSize: CGFloat) -> UIFont创建字体。

然后获取该字体的fontNamefamilyName

打印上述内容,即可得出当前iOS的答案;在iOS 13上运行它。


他不是在问如何。 - mskw
2
@mskw 希望/假设您同意硬编码字体名称是不良实践,您有更好的替代方案吗? - meaning-matters
1
我同意,但我觉得实际字体名称才是答案。而不是他的代码应该看起来如何。 - mskw
1
这个问题的不清晰之处在于,它没有明确表明他们是想要一种获取当前系统字体(目前为iOS 13)并在更改时自动获取下一个系统字体的方法(代码),还是只想要当前字体名称,并且不关心一旦当前系统字体更改,他们所拥有的任何字体名称都将过时。 - user5306470

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接