2016-06-09 102 views
2

我有一個UITextView,我想改變它的字體大小。然而,我希望它相對更改,因爲它從具有多種字體大小的文件中拉出來,我希望它相應地改變。 例如,我有一個字體大小爲36,字體大小爲12的單詞,我想分別將它們按0.75%縮放到27和9。iOS Swift相對字體大小

如果我嘗試:

textview.font = UIFont(name: textview.font.fontName, size: 20) 

它只會改變整個UITextView的字體大小。

謝謝!

+0

什麼樣的文件?你如何在文件中指定字體? – brimstone

+0

這是一個rtf文件,其中包含字體大小。 – Benny

回答

3

你可以使用這個擴展:

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) 

例子:

Example in playground

+0

我在文件底部添加了擴展名,並嘗試了它,但它似乎沒有做任何事... – Benny

+0

該擴展將函數'scaleBy'添加到'NSAttributedString'。你可以使用該函數來縮放'UITextView'的'''attributes'字符串的所有內容(例如) – Daniel

+0

@請注意,你必須將'scaleBy'的結果賦給'textView.attributedText'調用'scaleBy'將不會產生任何影響 – Daniel

0

您將不得不爲富文本格式文件編寫(或查找)解析器,以便爲每個文本元素提取字體大小數據(我認爲這將是大多數情況下的\fsN標籤),然後使用該數字(乘以0.75)來分別設置每個單詞或短語的大小。如果不同大小的單詞需要重新組合成單​​個字符串,則可以使用歸因字符串,但如果每個單詞或短語都位於單獨的標籤中,則不需要這樣做。

就個人而言,我會忽略源數據的字體大小,並在應用程序中強制佈局,看起來不錯,如果這是一個選項。

相關問題