字符串中的属性
Attributes in String
我正在处理文本。我有一些文本属性范围数组,但是当我将斜体应用于已经具有粗体属性的文本时,我的粗体属性消失了。在这种情况下,如何应用我的属性文本使其变为粗体斜体?或者我应该找到我的粗体和斜体范围的交集来应用 boldItalic 属性?
例如,我有 "This is my text",我想得到“This is my text”
抱歉,英语不好。
这是我的代码的一部分
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
}
如果您的应用面向 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())
如果有人感兴趣,我找到了解决方案
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())
}
}
})
}
}
我正在处理文本。我有一些文本属性范围数组,但是当我将斜体应用于已经具有粗体属性的文本时,我的粗体属性消失了。在这种情况下,如何应用我的属性文本使其变为粗体斜体?或者我应该找到我的粗体和斜体范围的交集来应用 boldItalic 属性?
例如,我有 "This is my text",我想得到“This is my text”
抱歉,英语不好。 这是我的代码的一部分
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
}
如果您的应用面向 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())
如果有人感兴趣,我找到了解决方案
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())
}
}
})
}
}