标签(空格分隔): 即时通讯 textView 环信
在开发即时通讯时,我们使用 textView 作为输入框,当我们输入很多内容后,点击发送,光标位置会“不在原位”,上移。如下图箭头所指:
![非正常状态下的光标](http://ww4.sinaimg.cn/large/74311666jw1f46ri5j6zkj20f60l6tbe.jpg)
非正常状态下的光标
光标正常情况应该是这样的:
![正常状态的光标](http://i2.buimg.com/f8b358e09fa59288.png)
正常状态的光标
造成这个问题的原因?
textView 继承 scrollView 有一个 contentSize 属性,我们根据此属性获取 textview 的高度。
本来 textView 的 ContentOffset 和contentSize是在一个位置上的,ContentOffset.Y 为0, contentSize 也为(0,0) ,这里为了演示清楚将两张分开显示,其实图应该重叠。
![正常情况光标位置](http://i4.buimg.com/5defd27e85459eea.png)
正常情况光标位置
但是当文字内容输入很多后,文字会“上移”,contentSize 向上走了,Y 值会变大,然后 ContentOffset.Y > 0,所以按发送后,光标位置会向上偏移,造成这个情况。
![光标偏移](http://i4.buimg.com/4f8b81b128b10109.png)
光标偏移
解决方案
在 textView 代理方法中添加下面两句代码就能搞定!
-(void)textViewDidChange:(UITextView *)textView{
[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];
}