watchOS 上不存在“.SFUIText-Regular”

".SFUIText-Regular" doesn't exist on watchOS

我正在为 Apple Watch 和 iOS 创建一个应用程序。我有 HTML 数据,我将其转换为 NSAttributedString 以显示在 UITextView 中(在 iOS 上)。我也想发到手表上用标签显示。

文本视图中的一切看起来都正常(例如,正确的背景颜色)。在手表上,它只显示文本(没有任何颜色)和 returns 这个错误:

app-Watch Extension[2994:212335] CoreText: PostScript name ".SFUIText-Regular" does not exist.

这是我的代码:

let mutAttText = NSMutableAttributedString(attributedString: self.textView.attributedText)
let attributedOptions : [String: AnyObject] = [
    NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
    NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding
]
var data: NSData = NSData()
do {
data = try mutAttText.dataFromRange(NSMakeRange(0, mutAttText.length), documentAttributes: attributedOptions)
} catch {

}


let htmlString = NSString(data: data, encoding: NSUTF8StringEncoding)
print(htmlString)

var attrStr = NSMutableAttributedString()
do {
    attrStr = try NSMutableAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes: nil)
    attrStr.enumerateAttribute(NSFontAttributeName, inRange: NSMakeRange(0, attrStr.length), options: NSAttributedStringEnumerationOptions.LongestEffectiveRangeNotRequired, usingBlock: { (attribute: AnyObject?, range: NSRange, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
        if let attributeFont = attribute as? UIFont {
            let newPointSize = CGFloat(15)
            let scaledFont = UIFont(descriptor: attributeFont.fontDescriptor(), size: newPointSize)
            attrStr.addAttribute(NSFontAttributeName, value: scaledFont, range: range)
        }
    })
    self.textView.attributedText = attrStr
    self.sendText(attrStr)
}
catch {
    print("error creating attributed string")
}

尽管 iOS 和 watchOS 都使用 San Francisco 字体,但字体在不同平台之间确实有所不同:

  • iOS, tvOS, OS X 使用旧金山 (SF-UI).

  • watchOS 使用旧金山紧凑型 (SF-Compact)。

您似乎在尝试缩放 iOS 系统字体的 pointSize,但 .SFUIText-Regular 在手表上不存在 OS。

您可能还想使用 systemFontOfSize: 而不是尝试缩放命名字体的磅值,因为根据磅值有不同的(文本和显示)版本。这将允许系统 该磅值。