" .SFUIText-经常"在watchOS上不存在

时间:2016-03-11 10:34:06

标签: html ios swift watchkit watch-os-2

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

文本视图中的所有内容都可以正常显示(例如,正确的背景颜色)。在手表上,它只显示文本(没有任何颜色)并返回此错误:

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")
}

1 个答案:

答案 0 :(得分:2)

尽管iOS和watchOS都使用旧金山字体,但平台之间的字体确实不同:

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

  • watchOS使用旧金山契约(SF-Compact)。

您似乎正在尝试扩展iOS系统字体的pointSize,但.SFUIText-Regular并不存在于watchOS上。

您也可能希望使用systemFontOfSize:而不是尝试缩放命名字体的磅值,因为根据磅值有不同的(文本和显示)版本。这将允许系统automatically select the appropriate (text or display) variant获得该点大小。