標簽(空格分隔): 即時通訊 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];
}