在Swift中为UILabel设置特定字体权重

时间:2018-02-19 02:48:55

标签: ios swift uilabel uifont

当人们询问如何设置粗体字体时,大多数人都建议:

let boldFont = UIFont.boldSystemFont(ofSize: ___)

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

Xcode system font weights

所以我的问题是你如何设置轻型,半重型或重型字体重量?我知道的唯一方法是:

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

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

4 个答案:

答案 0 :(得分:4)

我无法让UIFontDescriptor使用字体权重特征,但还有另一种方法。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

更多:

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

答案 3 :(得分:0)

非常老的线程,但是可能有人对如何在Swift中进行操作很感兴趣。

UIFont.Weight定义了所有选项:

  • ultraLight
  • 常规
  • semibold
  • 粗体
  • 沉重
  • 黑色

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

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

或者如果您想保留以前的大小:

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