swift 如果通过复制粘贴输入文本,UITextView计算高度错误

5gfr0r5j  于 2023-05-27  发布在  Swift
关注(0)|答案(4)|浏览(145)
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    let fixedWidth: CGFloat = textView.frame.size.width

    let newSize: CGSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))

    delegate.updateHeightTextView(height: newSize.height)

    return true
}

我在上面的函数中计算textview的高度。当我输入一些文本时,它工作得很好,但是当我复制和粘贴文本时,它不正确。

fnvucqvd

fnvucqvd1#

在本例中,只要TextView文本发生更改,就必须计算TextView的高度。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:nil];

- (void)textDidChange{
    //calculate the height here
}

UITextViewTextDidChangeNotification

bxjv4tth

bxjv4tth2#

您可以选择不同的方法来更改高度。
最简单的方法是设置:

textView.isScrollEnabled = false


取消勾选

Scrolling Enabled

情节提要

上的textview属性
在这里,文本视图的高度将根据内容而变化。
另一种方法是在textView委托方法中计算高度

func textViewDidChange(_ textView: UITextView) {

}
qyswt5oh

qyswt5oh3#

我找到了解决办法。而不是在- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;中计算高度textview我在- (void)textViewDidChangeSelection:(UITextView *)textView;中计算它
如果我在textViewDidChange中计算,如果我首先键入第一个字符或粘贴一些文本,则不会调用它。

wh6knrhe

wh6knrhe4#

方法sizeThatFits从复制、粘贴、删除所选文本返回正确的大小。

func textViewDidChange(_ textView: UITextView) {
        let contentSize = textView.sizeThatFits(
            .init(
                width: textView.contentSize.width,
                height: .greatestFiniteMagnitude
            )
        )
    }

相关问题