【发布时间】:2021-06-11 05:07:24
【问题描述】:
Simply 我正在尝试制作一个可拖动的、可缩放的UITextView,我已经完成了 拖动 和 缩放 在 textView 中使用单一字体。但问题是,当我尝试在 textView 中添加具有不同文本范围的不同字体样式时,我不知道在用手指缩放 textview 后如何计算字体大小。
因为每个自定义字体都有不同的尺寸。
这是我在 UITextView 缩放时用来增加和减少字体大小的代码。
func updateTextFont(edgeInsets:UIEdgeInsets) {
self.textContainerInset = UIEdgeInsets(top: (edgeInsets.top * frame.height),
left: (edgeInsets.left * frame.width),
bottom: (edgeInsets.bottom * frame.height),
right: (edgeInsets.right * frame.width))
if (self.text.isEmpty || self.bounds.size.equalTo(CGSize.zero)) { return; }
let textViewSize = CGSize(width: self.frame.width , height: self.frame.height);
let fixedWidth = textViewSize.width;
let expectSize = self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT)))
var expectFont = self.font
if (expectSize.height > textViewSize.height) {
while (self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT))).height > textViewSize.height && (self.font!.pointSize > CGFloat(1))) {
expectFont = self.font!.withSize(self.font!.pointSize - 0.1)
self.font = expectFont
}
}
else {
while (self.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat(MAXFLOAT))).height < textViewSize.height && (self.font!.pointSize < CGFloat(1000))) {
expectFont = self.font
self.font = self.font!.withSize(self.font!.pointSize + 0.1)
}
self.font = expectFont
}
}
所以这是我想将此方法转换为NSAttributeString 的情况,我无法将单个字体分配给textView。我想用 textView 边界缩放 attributeString。
参见 SS ,在第一个 SS 中,我使用属性字符串计算了框大小,在下一个 SS 中我更改了框大小,但如何使属性字符串适合更新的框。这就是我面临的问题。
【问题讨论】:
标签: ios swift uitextview scaling nsattributedstring