我正在为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")
}
答案 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获得该点大小。