【发布时间】:2020-12-16 17:46:40
【问题描述】:
我正在使用自定义字体,并且不知何故渲染搞砸了行高,可能是因为配置错误 descent 或 leading (?),所以 g 和 j 在渲染的最后一行被截断文本。我认为这可能是这种特定字体的问题,因为 Sketch 也暴露了相关字体的类似问题,但我觉得我对印刷测量或字体的了解不够。我发现Typographic Concepts 上的这个 Apple 文档页面非常有见地。
我使用 FontLab 的测试版本查看了字体本身,顺便说一句,我第一次使用它 - 所以我几乎不知道我在看什么。似乎 g 低于配置的descent,这似乎是最后一行。 (?)(参见:Character view in FontLab, showing the descend of the g)
通过lineSpacing,我可以仅调整行本身之间的距离,以在前几行中解决此问题。我知道 iOS 14 将带来一种在 SwiftUI 中修改 Text 的 leading 的方法。但我需要以 iOS 13 为目标,所以这无济于事。
我也尝试过 SwiftUI 的 Text、普通的 UILabel.text 和 UILabel.attributedText 自定义段落样式,但我在那里调整的任何内容似乎都没有缓解这个问题。
视图甚至没有剪裁。只是在框架中添加填充根本没有帮助。它增加了距离,但 g 和 j 仍然被切断。
我能做什么?子类 UILabel 并覆盖 intrinsicContentSize 以添加一些额外的空间,当最后一行有 g 和 j 时?感觉 a) 脏 b) 考虑到填充没有帮助,它可能无法解决问题?
字体本身是这里的问题吗?我可以以某种方式修补字体而不使其变得更糟吗?
当我使用较低级别的 API 时,有什么方法可以修改字体的前导或下降高度?似乎我可以去CoreText,因为CTFontCreateCopyWithAttributes(_:_:_:_:)是一个候选人,如果我可以通过属性修改前导、行距或下降?可以或猴子修补/调酒而不用膝盖射击自己吗?我应该只提交雷达反馈吗?
【问题讨论】:
-
任何指向可复制字体的链接?
-
@agibson007:这里有问题的字体是Edmondsans,这是一种专有/商业字体。
-
刚刚更新了我的答案,因为我有更多时间来测试系统中包含的大多数字体。我知道这很严重,但我真的认为这是字体文件问题,而不是 Apple 方面的错误。也许这是一个错误。谁知道。 UILabel 不使用核心文本我不认为所以这些功能可能只会被证明很有帮助。希望这两种解决方案之一有所帮助。
-
在这里报告我自己的问题:最后我联系了设计师,他可以为我提供不同版本的字体文件,这不再暴露问题。跨度>
标签: ios swift fonts uikit uifont