标签(空格分隔): 即时通讯 textView 环信
在开发即时通讯时,我们使用 textView 作为输入框,当我们输入很多内容后,点击发送,光标位置会“不在原位”,上移。如下图箭头所指:

光标正常情况应该是这样的:

造成这个问题的原因?
textView 继承 scrollView 有一个 contentSize 属性,我们根据此属性获取 textview 的高度。
本来 textView 的 ContentOffset 和contentSize是在一个位置上的,ContentOffset.Y 为0, contentSize 也为(0,0) ,这里为了演示清楚将两张分开显示,其实图应该重叠。

但是当文字内容输入很多后,文字会“上移”,contentSize 向上走了,Y 值会变大,然后 ContentOffset.Y > 0,所以按发送后,光标位置会向上偏移,造成这个情况。

解决方案
在 textView 代理方法中添加下面两句代码就能搞定!
-(void)textViewDidChange:(UITextView *)textView{
[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];
}
网友评论