我正在开发一个 iOS 应用程序,我需要使用 Core Text 渲染文本,以便更精确地控制文本布局。我想使用默认的系统字体,据我所知,对于 20 磅以下的文本大小,它是 SF Pro Text,对于 20 磅及以上的文本大小,它是 SF Pro Display。我的目标是确保我的应用程序尽可能匹配系统的外观和感觉,特别是在排版方面。
我知道 CTFontCreateWithName 需要字体名称字符串,但考虑到 iOS 会自动在这两种变体之间切换,我不确定如何根据文本大小动态指定 SF Pro Text 或 SF Pro Display。
这是我迄今为止尝试过的:
let fontSize: CGFloat = 18 // Example size
let fontName = "What should this be?" // How do I specify SF Pro Text or Display dynamically?
let fontRef = CTFontCreateWithName(fontName as CFString, fontSize, nil)
问题:
任何指导、代码片段或文档引用将不胜感激。
正确的工具是CTFontCreateUIFontForLanguage。这对于 CTFontCreateWithName 来说是不可能的。默认字体的“名称”是“.SFUI-Regular”,但你实际上无法传递它。
请注意,语言在这里可能很重要。还有其他 SF 系统字体,例如 SF 阿拉伯语、SF 格鲁吉亚语等。但是,如果您传递 NULL,它将使用当前的系统语言。 正如 Sweeper 在评论中指出的那样,看起来有新的
Swift 覆盖可以使语法变得更好一点。我没有使用过它们,但我确信它们是 CTFontCreateUIFontForLanguage 的包装器。