问题描述
我想将特定字体应用于未应用 NSMutableAttributedString
属性的 .font
。我怎么能做到这一点?
我尝试枚举包含字体的属性并提取范围,但我有点迷失于查找不包含字体属性的范围的复杂性,因为我认为我必须处理交叉点或可能的未知场景。有没有简单的方法来做到这一点?
到现在为止我做了什么:
var allRangesWithFont = [NSRange]()
let stringRange = NSRange(location: 0,length: length)
beginEditing()
enumerateAttribute(.font,in: stringRange,options: .longestEffectiveRangeNotrequired) { (value,range,stop) in
if let f = value as? UIFont {
allRangesWithFont.append(range)
}
}
解决方法
改变你的思维方式,检查字体是否存在,直接应用你的新字体。
attrStr
是您的 NSMutableAttributedString
,newFont
是您要应用的字体。
let newFont = UIFont.italicSystemFont(ofSize: 15)
attrStr.enumerateAttribute(.font,in: NSRange(location: 0,length: attrStr.length),options: []) { value,subrange,pointeeStop in
guard value == nil else { return }
attrStr.addAttribute(.font,value: newFont,range: subrange)
}