textView 聊天输入框光标恢复原位小技巧

标签(空格分隔): 即时通讯 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];

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容