[关闭]
@qixingguaizhuang 2016-05-24T13:19:56.000000Z 字数 552 阅读 1128

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

即时通讯 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];

}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注