如何使用iOS默认系统字体(SF Pro Text/Display)与Core Text的CTFontCreateWithName

问题描述 投票:0回答:1

我正在开发一个 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)

问题:

  1. 使用 CTFontCreateWithName 时指定 SF Pro Text 或 SF Pro Display 字体名称的正确方法是什么,以便它与 iOS 基于大小的自动字体选择保持一致?
  2. 是否有推荐的方法在 SF Pro Text 和 SF Pro Display 之间进行动态选择,或者我应该直接对所有文本大小使用其中一种方法?
  3. 将系统字体与 Core Text 一起使用时是否有任何注意事项或最佳实践,以确保我的应用程序的排版与 iOS 生态系统的其他部分保持一致?

任何指导、代码片段或文档引用将不胜感激。

ios swift objective-c fonts core-text
1个回答
0
投票

正确的工具是CTFontCreateUIFontForLanguage。这对于 CTFontCreateWithName 来说是不可能的。默认字体的“名称”是“.SFUI-Regular”,但你实际上无法传递它。

请注意,语言在这里可能很重要。还有其他 SF 系统字体,例如 SF 阿拉伯语、SF 格鲁吉亚语等。但是,如果您传递 NULL,它将使用当前的系统语言。 正如 Sweeper 在评论中指出的那样,看起来有新的

Swift 覆盖

可以使语法变得更好一点。我没有使用过它们,但我确信它们是 CTFontCreateUIFontForLanguage 的包装器。

© www.soinside.com 2019 - 2024. All rights reserved.