一般原生表單操作中都是UIScrollView上添加UITextView或UITextField完成的今阳,添加UITextView可以方便的換行餐弱,如果是UITextField就不會(huì)換行了引瀑。
不管是UITextView 還是 UITextField砍鸠,都有一個(gè)問題今艺,就是如果輸入框偏下巫延,那么彈起鍵盤的時(shí)候雨效,如何讓UIScrollView自動(dòng)向上滾動(dòng)微宝,使輸入框不被遮擋珠叔;
當(dāng)然方法應(yīng)該有很多蝎宇,可以設(shè)置UIScrollView的contentOffset,或者修改frame等,然后等鍵盤消失的時(shí)候再修改回去祷安。
有沒有簡單的方法呢姥芥?
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的實(shí)現(xiàn)如下:
- (void)keyboardWillShow:(NSNotification *)notify
{
//獲取鍵盤彈出后的高度
CGRect keyBoardRect = [notify.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat deltaY = keyBoardRect.size.height;
//設(shè)置新的內(nèi)邊距,這個(gè)內(nèi)邊距是UIScrollView的最后一行距離UIScrollView底邊框的距離汇鞭,
//系統(tǒng)會(huì)將當(dāng)前選中行距離窗口底邊的距離設(shè)為該值凉唐,從而正好不被鍵盤遮蓋住。
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);
[self.scrollView setContentInset:e];
//調(diào)整滑動(dòng)條距離窗口底邊的距離
[self.scrollView setScrollIndicatorInsets:e];
}
(void)keyboardWillHide:(NSNotification *)notify
{
//鍵盤縮回后霍骄,恢復(fù)正常設(shè)置
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);
[self.scrollView setScrollIndicatorInsets:e];
[self.scrollView setContentInset:e];
}
最終效果如下:
20220602-223118.mp4
2 如果輸入框是UITextView:
監(jiān)聽鍵盤的代碼和上面一樣台囱,如果把UITextField換為UITextView,發(fā)現(xiàn)不生效了读整,找了很久也沒發(fā)現(xiàn)問題玄坦;
后來發(fā)現(xiàn) UITextField 繼承自 UIControl,而UITextView繼承自UIScrollView,莫非是UIScrollView嵌套UIScrollView就會(huì)有問題煎楣;
后來發(fā)現(xiàn)只要把 UITextView的scrollEnabled 設(shè)置為NO即可豺总。
input.scrollEnabled = NO;
其他方法參考:
- iOS開發(fā)之UIScrollView與TextView嵌套: http://www.reibang.com/p/d1a9d8aae84b
- 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
- 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