我正在处理文字。我有一些文本属性范围的数组,但是当我将斜体应用于已经具有粗体属性的文本时,我的粗体属性消失了。在这种情况下,如何将我的属性文本应用为boldItalic?或者我应该找到我的粗体和斜体范围的交集来应用boldItalic属性?
例如,我有“这是我的文字”,我想得到“此是 y 文字”
抱歉,英语不好。 这是我的代码的一部分
func attributedArticleText ()-> NSMutableAttributedString {
let attString = NSMutableAttributedString(attributedString:NSAttributedString(string: articleText))
if let strong = attributes?.strong {
for range in strong {
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIDisplay-Bold", size: 12.0)!], range: range.range())
}
}
if let italic = attributes?.italic {
for range in italic {
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIText-LightItalic", size: 12.0)!], range: range.range())
}
}
if let underLined = attributes?.underline {
for range in underLined {
attString.addAttributes([NSUnderlineStyleAttributeName: 1], range: range.range())
}
}
if let cross = attributes?.cross {
for range in cross {
attString.addAttributes([NSStrikethroughStyleAttributeName: 1], range: range.range())
}
}
return attString
}
答案 0 :(得分:1)
如果您的应用定位到iOS7.0及更高版本
,也可以使用NSObliquenessAttributeName
let attr = NSMutableAttributedString(string: text!)
attr.addAttribute(NSObliquenessAttributeName, value: 0.5, range: NSMakeRange(0, text!.characters.count))
在您的代码中,您将两次更改相同的属性NSFontAttributeName
。
这适用于Bold
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIDisplay-Bold", size: 12.0)!], range: range.range())
这适用于LightItalic
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIText-LightItalic", size: 12.0)!], range: range.range())
解决方案:字体SFUIText-LightItalic
不支持Bold
。尝试合并两者,检查您的字体是否支持SFUIDisplay-BoldItalic
或类似
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIDisplay-BoldItalic", size: 12.0)!], range: range.range())
答案 1 :(得分:0)
如果有人感兴趣,我找到了解决方案
if let italic = attributes?.italic {
for range in italic {
attString.enumerateAttributesInRange(range.range(), options: NSAttributedStringEnumerationOptions(rawValue: 0), usingBlock: { (dict : [String : AnyObject], rangeNS : NSRange, _) -> Void in
if let font = dict["NSFont"] as? UIFont {
let descriptor = font.fontDescriptor()
if descriptor.symbolicTraits == .TraitBold {
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIText-BoldItalic", size: 12.0)!], range: range.range())
} else {
attString.addAttributes([NSFontAttributeName : UIFont(name: "SFUIText-LightItalic", size: 12.0)!], range: range.range())
}
}
})
}
}