我有一個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