我有一个UITextView,我想改变它的字体大小。 但是,我希望它相对更改,因为它从具有多个字体大小的文件中提取并且我希望它相应地更改。 例如,我有一个字体大小为36的单词和一个字体大小为12的单词,我想将它们分别缩放0.75%到27和9。
如果我尝试:
textview.font = UIFont(name: textview.font.fontName, size: 20)
它只会改变整个UITextView字体大小。
谢谢!
答案 0 :(得分:4)
您可以使用此扩展程序:
extension NSAttributedString {
@warn_unused_result
func scaleBy(scale: CGFloat) -> NSAttributedString {
let scaledAttributedString = NSMutableAttributedString(attributedString: self)
scaledAttributedString.enumerateAttribute(NSFontAttributeName, inRange: NSRange(location: 0, length: scaledAttributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (value, range, _) in
if let oldFont = value as? UIFont {
let newFont = oldFont.fontWithSize(oldFont.pointSize * scale)
scaledAttributedString.removeAttribute(NSFontAttributeName, range: range)
scaledAttributedString.addAttribute(NSFontAttributeName, value: newFont, range: range)
}
}
return scaledAttributedString
}
}
然后打电话给:
textField.attributedText = textField.attributedText!.scaleBy(0.5)
示例:
答案 1 :(得分:0)
您必须为富文本格式文件编写(或查找)解析器,该文件可以提取每个文本元素的字体大小数据(我认为在大多数情况下这将是\fsN
标记)然后使用该数字(乘以0.75)分别设置每个单词或短语的大小。如果需要将不同大小的单词重新组合成单个字符串,则可以使用属性字符串,但如果每个单词或短语都在单独的标签中,则不需要这样做。
就个人而言,我会忽略源数据的字体大小,并在应用程序中强加一个看起来不错的布局,如果这是一个选项。