-systemFontOfSize:和-boldSystemFontOfSize:之间是否有中等字重的字体?

41
- systemFontOfSize太细了,boldSystemFontOfSize又太粗了。我需要介于两者之间的字体。
当我像这样创建UIFont时:
[UIFont boldSystemFontOfSize:14];

然后调试器会打印出这个字体信息:

字体名称:".Helvetica NeueUI"; 字重:bold; 字形:normal; 字号:14px

有时候字体会有中等字重的选项。我该如何创建一个具有中等字重的字体呢?


请注意,在这个非常老的问题上,滚动到正确的现代答案@AxelGuilmin,它可以正常工作。 - Fattie
6个回答

84

iOS 8.2开始,您可以使用:

[UIFont systemFontOfSize:14 weight:UIFontWeightMedium];

2
请注意,UIFontWeightMedium是一个CGFloat类型,而不是枚举类型。 - onmyway133

25

调用NSLog(@"%@", [UIFont fontNamesForFamilyName:@"Helvetica Neue"]);会打印出Helvetica Neue的所有可用字体样式,其中包括看起来你想要的HelveticaNeue-Medium

UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:14.0f];
如果你想确保字体在系统字体更改时也会更改(例如在视网膜设备上从Helvetica更改为Helvetica Neue),你可以先获取系统字体,然后使用它的familyNamepointSize,使用+fontNamesForFamilyName检索中等权重的字体,然后使用+fontWithName:size:

这不是与 UI 版本完全相同的字体。根据我的经验,它在垂直间距属性方面有所不同,并且当您从带属性的字符串获取大小属性时会返回不同的结果。 - Yoav
1
@Ben-Uri 自从我写下那个答案以来,系统字体已经改变了。Andrei的答案现在更加准确。 - JustSid

17

Swift 2.0,Xcode 7.1

if #available(iOS 8.2, *) {
   titleLabel?.font = UIFont.systemFontOfSize(15, weight: UIFontWeightMedium)
} else {
    titleLabel?.font = UIFont(name: "HelveticaNeue-Medium", size: 15)
}

如果我不使用if语句,而只是使用titleLabel?.font = UIFont(name: "HelveticaNeue-Medium", size: 15),在iOS 8.2中会发生什么? - Jace

8

Swift 3:

UIFont.systemFont(ofSize: 14, weight: UIFontWeightMedium)

8

使用 Swift 4 或 5,添加此扩展:

extension UIFont {
    class func mediumSystemFont(ofSize pointSize: CGFloat) -> UIFont {
        return self.systemFont(ofSize: pointSize, weight: .medium)
    }
}

然后:
myLabel.font = UIFont.mediumSystemFont(ofSize: 16)

同样的原理也适用于 .semibold, .black, 等等,查看UIFont.Weight了解更多信息。


0

Swift 2.3 不改变字体大小:

extension UIFont {
    var mediumFont: UIFont {
        return UIFont.systemFontOfSize(self.pointSize, weight: UIFontWeightMedium)
    }
}

使用方法:

titleLabel.font = titleLabel.font.mediumFont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接