標(biāo)簽(空格分隔): 即時通訊 textView 環(huán)信
在開發(fā)即時通訊時,我們使用 textView 作為輸入框,當(dāng)我們輸入很多內(nèi)容后,點(diǎn)擊發(fā)送,光標(biāo)位置會“不在原位”,上移。如下圖箭頭所指:

非正常狀態(tài)下的光標(biāo)
光標(biāo)正常情況應(yīng)該是這樣的:

正常狀態(tài)的光標(biāo)
造成這個問題的原因?
textView 繼承 scrollView 有一個 contentSize 屬性,我們根據(jù)此屬性獲取 textview 的高度。
本來 textView 的 ContentOffset 和contentSize是在一個位置上的,ContentOffset.Y 為0, contentSize 也為(0,0) ,這里為了演示清楚將兩張分開顯示,其實(shí)圖應(yīng)該重疊。

正常情況光標(biāo)位置
但是當(dāng)文字內(nèi)容輸入很多后,文字會“上移”,contentSize 向上走了,Y 值會變大,然后 ContentOffset.Y > 0,所以按發(fā)送后,光標(biāo)位置會向上偏移,造成這個情況。

光標(biāo)偏移
解決方案
在 textView 代理方法中添加下面兩句代碼就能搞定!
-(void)textViewDidChange:(UITextView *)textView{
[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];
}