textView 聊天輸入框光標(biāo)恢復(fù)原位小技巧

標(biāo)簽(空格分隔): 即時通訊 textView 環(huán)信


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

非正常狀態(tài)下的光標(biāo)
非正常狀態(tài)下的光標(biāo)

光標(biāo)正常情況應(yīng)該是這樣的:

正常狀態(tài)的光標(biāo)
正常狀態(tài)的光標(biāo)

造成這個問題的原因?

textView 繼承 scrollView 有一個 contentSize 屬性,我們根據(jù)此屬性獲取 textview 的高度。

本來 textView 的 ContentOffset 和contentSize是在一個位置上的,ContentOffset.Y 為0, contentSize 也為(0,0) ,這里為了演示清楚將兩張分開顯示,其實(shí)圖應(yīng)該重疊。

正常情況光標(biāo)位置
正常情況光標(biāo)位置

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

光標(biāo)偏移
光標(biāo)偏移

解決方案

在 textView 代理方法中添加下面兩句代碼就能搞定!

-(void)textViewDidChange:(UITextView *)textView{

[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容