在 Swift 中为 UILabel 设置特定字体粗细

Set Specific Font Weight for UILabel in Swift

当有人询问如何设置粗体时,大多数人的建议是:

let boldFont = UIFont.boldSystemFont(ofSize: ___)

但看看标准系统字体提供的所有字体粗细:

所以我的问题是如何设置浅、半粗体或粗字体?我知道的唯一方法是:

sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

但是,我仍在询问,因为这不是强类型的。大多数其他 class 属性是通过从一组固定的选项中进行选择来设置的,并且不需要传递我可能会输入错误的字符串。我想我可以设置自己的全局枚举...但是有更好的主意吗?

我无法让 UIFontDescriptor 使用字体粗细特性,但还有另一种方法。

let font = UIFont.systemFont(ofSize: 20, weight: .light)

.light 替换为您想要的 UIFont.Weight 中的任何值,该值基本上与您问题中显示的下拉列表匹配。

更多:

let font = UIFont.systemFont(ofSize: 20, weight: UIFont.Weight(500))

非常古老的线程,但有人可能对 Swift 中的操作方法感兴趣。

UIFont.Weight 定义所有选项:

  • 超轻
  • 常规
  • 半粗体
  • 加粗
  • 黑色

你可以像这样简单地使用,例如:

label.font = UIFont.systemFont(ofSize: size, weight: .bold)

或者如果您想保持以前的尺寸:

label.font = UIFont.systemFont(ofSize: label.font!.pointSize, weight: .bold)

您可以使用此扩展程序。它将权重分配给 fontDescriptor 的权重键并使用这个新描述符实例化您的字体。

extension UIFont {
  func withWeight(_ weight: UIFont.Weight) -> UIFont {
    let newDescriptor = fontDescriptor.addingAttributes([.traits: [
      UIFontDescriptor.TraitKey.weight: weight]
    ])
    return UIFont(descriptor: newDescriptor, size: pointSize)
  }
}