调整 UITextView 大小时缩放字体大小

时间:2021-05-17 09:25:58

标签: ios swift uifont

我有一个 UITextView,它的属性文本可以有不同的字体、字体大小和颜色,如图(左)所示。

用户可以通过从调整大小手柄(垂直/水平或对角线)拖动来调整 textView 的大小。如果用户垂直或水平调整大小,我只需更改 textView 的宽度或高度。 textView 的字体大小不应发生任何变化。如果用户对角调整大小(保持纵横比),我想按比例缩放每个文本范围的字体大小(应该看起来像正确的图像)。

请注意,我通过更改宽度和高度约束(不使用缩放转换)来调整 textView 的大小。

enter image description here

这是我在调整 textView 大小时按比例缩放每个文本块的字体大小的方法。

            let attributedText = self.textView.attributedText.mutableCopy() as! NSMutableAttributedString
            attributedText.beginEditing()
            
            // change the size of any font found in the attributed string
            attributedText.enumerateAttribute(.font, in: NSRange(location: 0, length: attributedText.string.utf16.count)) { (value, range, stop) in
                if let oldFont = value as? UIFont {
                    let newFont = oldFont.withSize(oldFont.pointSize * scaleX)
                    attributedText.addAttribute(.font, value: newFont, range: range)
                }
            }
            attributedText.endEditing()
            self.textView.attributedText = attributedText

如您所见,如果 textView 宽度加倍(即 scaleX = 2),那么字体的磅值也会加倍。但我不确定这是否正确,因为有时文本内容会大于 textView 大小。因此,一些文本被 textView 边界剪掉了。

有几个关于如何调整字体大小以填充 UITextView 的 stackoverflow 问题。但这并不完全是我想要的。

谁能帮我计算我应该用来缩放字体大小的正确比例因子。

谢谢。

0 个答案:

没有答案