UIScrollView中的編輯框(UITextView/UITextField) 被彈出鍵盤遮擋的問題

一般原生表單操作中都是UIScrollView上添加UITextView或UITextField完成的,添加UITextView可以方便的換行,如果是UITextField就不會換行了。

不管是UITextView 還是 UITextField,都有一個問題,就是如果輸入框偏下,那么彈起鍵盤的時候,如何讓UIScrollView自動向上滾動,使輸入框不被遮擋;
當然方法應該有很多,可以設置UIScrollView的contentOffset,或者修改frame等,然后等鍵盤消失的時候再修改回去。

有沒有簡單的方法呢?

1 如果輸入框是UITextField:

  • 添加鍵盤彈起和收起的監(jiān)聽

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    

keyboardWillShow和keyboardWillHide的實現如下:


- (void)keyboardWillShow:(NSNotification *)notify

{

  //獲取鍵盤彈出后的高度

CGRect keyBoardRect = [notify.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

CGFloat deltaY = keyBoardRect.size.height;

//設置新的內邊距,這個內邊距是UIScrollView的最后一行距離UIScrollView底邊框的距離,

 //系統(tǒng)會將當前選中行距離窗口底邊的距離設為該值,從而正好不被鍵盤遮蓋住。

UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);

[self.scrollView setContentInset:e];

  //調整滑動條距離窗口底邊的距離

[self.scrollView setScrollIndicatorInsets:e];

}

(void)keyboardWillHide:(NSNotification *)notify

{

 //鍵盤縮回后,恢復正常設置

UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);

[self.scrollView setScrollIndicatorInsets:e];

[self.scrollView setContentInset:e];

}

最終效果如下:

20220602-223118.gif

20220602-223118.mp4

2 如果輸入框是UITextView:

監(jiān)聽鍵盤的代碼和上面一樣,如果把UITextField換為UITextView,發(fā)現不生效了,找了很久也沒發(fā)現問題;
后來發(fā)現 UITextField 繼承自 UIControl,而UITextView繼承自UIScrollView,莫非是UIScrollView嵌套UIScrollView就會有問題;
后來發(fā)現只要把 UITextView的scrollEnabled 設置為NO即可。

input.scrollEnabled = NO;

其他方法參考:

  1. iOS開發(fā)之UIScrollView與TextView嵌套: http://www.itdecent.cn/p/d1a9d8aae84b
  2. https://blog.csdn.net/xcysuccess3/article/details/40590463?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-1-40590463-blog-52181142.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.2&utm_relevant_index=4
  3. UITableView中的鍵盤遮蓋問題 :https://blog.csdn.net/zhoushuangjian511/article/details/53129068?spm=1001.2101.3001.6650.11&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-53129068-blog-52181142.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-11-53129068-blog-52181142.pc_relevant_paycolumn_v3&utm_relevant_index=17

4 [操作系統(tǒng)]處理UIScrollView中的編輯框被彈出鍵盤遮擋的問題 : https://blog.csdn.net/wangzhen3416/article/details/52181142

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

友情鏈接更多精彩內容