我有一个现有的NSAttributedString,可能包含用户编辑的属性(即Bold,Italic,Underline)。我需要能够将基本字体从Georgia更改为Helvetica,同时保持格式属性。像这样设置字体,覆盖所有格式属性(即Georgia-Bold):
NSDictionary *fontFaceStyle = [[NSDictionary alloc] init];
fontFaceStyle = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:12.0]};
[combinedAttributedTextString setAttributes:fontFaceStyle range:NSMakeRange(0, combinedAttributedTextString.length)];
我看到一些different but related threads建议枚举字符串中的每个属性范围,进行字体更改,然后重新应用适用的格式属性。这似乎相当密集,我不确定当多个属性存在时你是如何应用它的(即粗体和斜体和下划线)。
感谢您的任何建议。
答案 0 :(得分:0)
我有完全相同的问题,枚举效果很好。这里“range”是你想要处理的范围,“newFamily”是一个字体系列。我正在使用textStorage,我假设在对beginEditing()
/ endEditing()
的调用打包时对这些类型的编辑进行了有用的清理。
textStorage.beginEditing()
textStorage.enumerateAttributes(in: range, options: [], using: { attr, attrRange, _ in
if let font = attr[NSFontAttributeName] as? NSFont {
let newFont = NSFontManager.shared().convert(font, toFamily: newFamily)
storage.addAttribute(NSFontAttributeName, value: newFont, range: attrRange)
}
})
textStorage.endEditing()