iOS Swift相对字体大小

时间:2016-06-09 10:54:58

标签: ios swift fonts

我有一个UITextView,我想改变它的字体大小。 但是,我希望它相对更改,因为它从具有多个字体大小的文件中提取并且我希望它相应地更改。 例如,我有一个字体大小为36的单词和一个字体大小为12的单词,我想将它们分别缩放0.75%到27和9。

如果我尝试:

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

它只会改变整个UITextView字体大小。

谢谢!

2 个答案:

答案 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)

示例:

Example in playground

答案 1 :(得分:0)

您必须为富文本格式文件编写(或查找)解析器,该文件可以提取每个文本元素的字体大小数据(我认为在大多数情况下这将是\fsN标记)然后使用该数字(乘以0.75)分别设置每个单词或短语的大小。如果需要将不同大小的单词重新组合成单​​个字符串,则可以使用属性字符串,但如果每个单词或短语都在单独的标签中,则不需要这样做。

就个人而言,我会忽略源数据的字体大小,并在应用程序中强加一个看起来不错的布局,如果这是一个选项。