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

Ios 如果通过复制粘贴输入文本,UITextView计算高度错误,ios,swift,textview,Ios,Swift,Textview,我在上面的函数中计算textview高度。 当我输入一些文本时,它工作得很好,但当我复制和粘贴文本时,它是不正确的。在您的情况下,只要TextView的文本发生变化,您就必须计算TextView的高度 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { let fixedWidth: CGFloat = te

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

在您的情况下,只要TextView的文本发生变化,您就必须计算TextView的高度

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的文本发生变化,您就必须计算TextView的高度

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
}

您可以选择不同的方法来更改高度

最简单的方法是设置:

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

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

取消勾选

textView.isScrollEnabled = false
故事板上textview的属性

此处,文本视图的高度将根据内容而变化

另一种方法是计算textView委托方法内部的高度

Scrolling Enabled 

可以选择不同的方法来更改高度

最简单的方法是设置:

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

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

取消勾选

textView.isScrollEnabled = false
故事板上textview的属性

此处,文本视图的高度将根据内容而变化

另一种方法是计算textView委托方法内部的高度

Scrolling Enabled 

我找到了解决办法。而不是在文本视图中计算高度
-(BOOL)textView:(UITextView*)textView应更改textinrange:(NSRange)范围替换text:(NSString*)文本
我计算了一下
-(void)textViewDidChangeSelection:(UITextView*)textView

如果我算进去
textViewDidChange

如果我首先键入第一个字符或粘贴一些文本,则不会调用它。

我找到了解决方案。而不是在文本视图中计算高度
-(BOOL)textView:(UITextView*)textView应更改textinrange:(NSRange)范围替换text:(NSString*)文本
我计算了一下
-(void)textViewDidChangeSelection:(UITextView*)textView

如果我算进去
textViewDidChange

如果我首先键入第一个字符或粘贴一些文本,则不会调用它。

1。这是什么
sizeThatFits
方法?2.您的代码没有考虑建议的更改。请记住,
shouldChangeTextIn
在实际更新文本视图之前被调用。3.您的代码即使在键入时也无法正常工作。请观察textView的text属性并计算文本更改时的大小您可以使用RxCocoa进行观察perpose@rmaddy我更新了我的代码。当我键入时,“新闻大小”返回正确,但当我粘贴文本时,它不正确。您所做的更新与我的评论无关。1。这是什么
sizeThatFits
方法?2.您的代码没有考虑建议的更改。请记住,
shouldChangeTextIn
在实际更新文本视图之前被调用。3.您的代码即使在键入时也无法正常工作。请观察textView的text属性并计算文本更改时的大小您可以使用RxCocoa进行观察perpose@rmaddy我更新了我的代码。当我键入时,“新闻大小”返回正确,但当我粘贴文本时,这是不正确的。您所做的更新与我的评论无关。我使用func textViewDidChangeSelection({textView:UITextView){},因为我的textViewDidChange()在键入第一个字符或粘贴一些文本时不会调用。我的textview放在tableviewcell中,因此我必须更新cell heightset委托并在cell类中使用delegates方法。我使用func textViewDidChangeSelection(textview:UITextView){},因为我的textViewDidChange()在键入第一个字符或粘贴一些文本时不会调用。而我的textview放在tableviewcell中,因此我必须更新单元格高度设置委托并使用cell类中的委托方法。我的textViewDidchange在键入第一个字符或粘贴一些文本时不调用。所以我使用了:textViewDidChangeSelection(textView:UITextView){}它起作用了!当我键入第一个字符或粘贴一些文本时,我的textViewDidchange没有调用。所以我使用了:textViewDidChangeSelection(textView:UITextView){}它起作用了!