我有一个UITextView,我想改变它的字体大小。然而,我希望它相对更改,因为它从具有多种字体大小的文件中拉出来,我希望它相应地改变。 例如,我有一个字体大小为36,字体大小为12的单词,我想分别将它们按0.75%缩放到27和9。iOS Swift相对字体大小
如果我尝试:
textview.font = UIFont(name: textview.font.fontName, size: 20)
它只会改变整个UITextView的字体大小。
谢谢!
我有一个UITextView,我想改变它的字体大小。然而,我希望它相对更改,因为它从具有多种字体大小的文件中拉出来,我希望它相应地改变。 例如,我有一个字体大小为36,字体大小为12的单词,我想分别将它们按0.75%缩放到27和9。iOS Swift相对字体大小
如果我尝试:
textview.font = UIFont(name: textview.font.fontName, size: 20)
它只会改变整个UITextView的字体大小。
谢谢!
你可以使用这个扩展:
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)
例子:
您将不得不为富文本格式文件编写(或查找)解析器,以便为每个文本元素提取字体大小数据(我认为这将是大多数情况下的\fsN
标签),然后使用该数字(乘以0.75)来分别设置每个单词或短语的大小。如果不同大小的单词需要重新组合成单个字符串,则可以使用归因字符串,但如果每个单词或短语都位于单独的标签中,则不需要这样做。
就个人而言,我会忽略源数据的字体大小,并在应用程序中强制布局,看起来不错,如果这是一个选项。
什么样的文件?你如何在文件中指定字体? – brimstone
这是一个rtf文件,其中包含字体大小。 – Benny