如何在常规和轻量之间获得系统字体的自定义字体粗细?

时间:2015-12-26 08:36:27

标签: ios fonts custom-keyboard

我在自定义键盘扩展程序中使用iOS系统字体(旧金山适用于iOS 9+)。

我注意到系统键盘中显示的字体重量比UIFontWeightRegular轻,但它也比UIFontWeightLight更大。

如何在我自己的键盘上使用与股票键盘相同的重量来实现字体?

1 个答案:

答案 0 :(得分:0)

systemFontOfSize:weight: API允许您将任意权重指定为CGFloat,iOS将返回最合适的字体。

例如,您可以UIFont.systemFontOfSize(17, weight: UIFontWeightRegular)代替UIFont.systemFontOfSize(17, weight: 0)。使用weight值进行播放,以确定是否可以获得符合要求的字体。

另一种选择可能是尝试使用HTML&带有属性字符串的CSS。使用font-weight,您可以指定介于100和900之间的值,其中400等于普通字体粗细。

var htmlString = "<p>A</p>"
htmlString += "<style>p{font-family:'-apple-system'; font-size:17px; font-weight:300}</style>"
let htmlData = htmlString.dataUsingEncoding(NSUnicodeStringEncoding)!
let attributedString = try! NSAttributedString(data: htmlData, options: [
    NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
    NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding
], documentAttributes: nil)
self.aLabel.attributedText = attributedString

更新:尝试这一点,两种解决方案都不允许更好地控制字体粗细。两者都将使用最接近给定重量的字体呈现文本 - 常规或轻型,但两者之间没有任何内容。如果要为细字体添加较粗的笔划,则可能需要使用自定义文本绘图。您可以通过NSAttributedString's drawing API调查绘图。您可以通过NSStrokeWidthAttributeName应用自定义笔触宽度。我自己没试过,但这是一个值得研究的想法。