Ios 如果通过复制粘贴输入文本,UITextView计算高度错误
我在上面的函数中计算textview高度。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的高度
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){}它起作用了!