这看起来应该非常简单,但无论出于什么原因,它都不起作用。我在SO上读过类似的帖子,似乎字体特征字典有问题?这是一个问题,还是我完全错过了什么?这是我第一次摆弄这样的字体,所以我想可能是后者。
我不想使用常量或提供一个带有“-bold”变体的字体。我想有细粒度控制字体的重量。
let traits = [UIFontWeightTrait : 1.0]
imgFontDescriptor = UIFontDescriptor(fontAttributes: [UIFontDescriptorNameAttribute: "Helvetica"])
imgFontDescriptor = imgFontDescriptor.fontDescriptorByAddingAttributes([UIFontDescriptorTraitsAttribute:traits])
imgTextFont = UIFont(descriptor: imgFontDescriptor!, size: 24.0)
研究:
- Font Descriptor returns nil in iOS 8
- www.example.com
根据iOS文档,使用数字值应该可以工作(我运行的是iOS 9。2):
UIFont权重属性
作为NSNumber对象的规格化权重值。有效值范围为-1。0到1.0。0的值。0对应于常规或中等字体粗细。也可以使用字体粗细常量来指定特定的粗细;有关可以使用的常量列表,请参见字体粗细。在iOS 7中可用。0及以后
6条答案
按热度按时间cwxwcias1#
如果使用现有的fontDescriptor(例如从现有的字体),它可能无法工作,因为显式的'。fontDescriptor中的'name'属性。fontAttributes。
这是一个很好的解决方案(Swift 4):
使用方法:
8yparm6h2#
UIFont(descriptor: imgFontDescriptor!, size: 24.0)
返回与描述符匹配的字体。如果它找不到与您的描述匹配的字体,则返回默认字体。因此,您无法手动控制体重。这取决于你使用的字体。如果Font支持该权重,它将返回该权重。最后,你应该使用
[UIFontDescriptorFamilyAttribute: "Helvetica"]
。因此,它将根据FamilyName和您的FontWeight确定FontName。正确的方法是使用Apple lib中的常量:
您应该使用http://iosfonts.com/来确定该系列名称支持的字体粗细。
如果是Helvetica:
bd1hkmkf3#
Swift 41、简单地做这样的事情:
lf3rwulv4#
一个简洁的扩展:
ni65a41a5#
以下是Apple在其CareKit框架中对
UIFont+Extensions.swift
的扩展:https://github.com/carekit-apple/CareKit/
tpxzln5u6#
根据答案。@pkamb和@张宏浩
只能使用以下扩展名更新字体粗细
可用于
这是为了匹配命名为https://developer.apple.com/documentation/swiftui/text/fontweight(_:)的新SwiftUI API