如何使用 .monospaced 系统字体设计

Posted

技术标签:

【中文标题】如何使用 .monospaced 系统字体设计【英文标题】:How to use the .monospaced system font design 【发布时间】:2019-06-15 20:09:50 【问题描述】:

我正在尝试使用系统字体并应用等宽设计,但没有运气。我可以使用自定义字体函数成功地使文本等宽并传入Courier 和一个大小,但这不是主意,因为字体大小是固定的。

VStack 
    Text("lmlmlmlm 12345678")
    Text("lmlmlmlm 12345678")
    .font(Font.system(.body, design: .monospaced))
    Text("lmlmlmlm 12345678")
    .font(Font.custom("Courier", size: 18))

如何让系统字体与.monospaced 设计一起使用?我认为这可能是.monospaced 的错误,因为.serif 选项确实按预期修改了文本。

【问题讨论】:

【参考方案1】:

似乎.monospaced 字体仅在给定固定大小时才适用:

Text("monospaced")
  .font(.system(size: 14, design: .monospaced))

对于动态文本样式(例如 body),这将不起作用。但正如您也提到的,它适用于其他字体,所以这可能是 Xcode 11.0 beta 中的一个错误,希望在下一个版本中得到修复。


更新:

Xcode 11 beta 3 已修复此问题。下面的代码现在可以工作了:

Text("monospaced")
    .font(.system(.body, design: .monospaced))

【讨论】:

也看到了这一点,并使用反馈助手向 Apple 提交了错误报告 - FB6146888【参考方案2】:

如果你只想让数字等宽,你可以尝试使用这样的东西:

Text("0123456789")
    .font(Font.system(.body, design: .monospaced).monospacedDigit())

但是,这并没有规避 Xcode 11.0 beta 的明显错误。字母仍然不是等宽的。

【讨论】:

如果你只想要等宽的数字,你应该将'design'参数设置为'.default'。干杯。

以上是关于如何使用 .monospaced 系统字体设计的主要内容,如果未能解决你的问题,请参考以下文章

浏览器使用哪种等宽字体?

Android中通过typeface设置字体

IE8中的Monospace字体忽略空格

VC怎么能获取系统字体

请问如何获得中文字体的英文名?VC

[ubuntu][原创]Ubuntu系统下改变VSCode终端字体