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

How to use the .monospaced system font design

我正在尝试使用系统字体并应用等宽设计,但没有成功。我可以使用自定义字体函数并传入 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 选项确实按预期修改了文本。

似乎 .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))

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

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

但是,这并不能避免 Xcode 11.0 beta 的明显错误。字母仍未呈现等宽。