系列文集:爆棧熱門 iOS 問題伐蒂。目錄在此迷扇。倉(cāng)薯翻譯,歡迎指正:)
問題
iOS 上的鍵盤彈出會(huì)擋住輸入框塞俱,怎么處理?
答案
倉(cāng)薯注:處理鍵盤遮擋是 iOS 上老生常談的問題吏垮,到處都是大段大段的代碼障涯,本問題下也不例外罐旗。我個(gè)人一直用 IQKeyboardManager,有動(dòng)畫/能復(fù)原/兼容 UITableView 等/基本一行代碼都不用寫唯蝶,在大部分情況下能完美解決問題九秀。因此只在此翻譯一下 IQKeyboardManager 作者的答案。對(duì)其他答案有興趣的讀者請(qǐng)前往原文生棍。
Mohd Iftekhar Qurashi颤霎,39 贊
想要在整個(gè)工程里全局解決這個(gè)問題,可以使用我寫的 IQKeyboardManager涂滴,下面是我實(shí)現(xiàn)的思路:
第1步: 我在一個(gè)單例類 IQKeyboardManager 里添加了全局監(jiān)聽 UITextField
友酱、UITextView
以及UIKeyboard
事件的通知。
第2步: 如果收到了
UIKeyboardWillShowNotification
柔纵、UITextFieldTextDidBeginEditingNotification
缔杉、 UITextViewTextDidBeginEditingNotification
這些鍵盤彈出的通知,我會(huì)從UIWindow.rootViewController
的 view 層級(jí)里面找到當(dāng)前位于最頂層的 ViewController搁料,叫做topMostViewController
或详。為了讓正在編輯的UITextField
或UITextView
不被遮擋,我們要調(diào)整topMostViewController.view
的 frame郭计。
第3步: 計(jì)算出 topMostViewController.view
應(yīng)該上移多少才能把正在編輯的UITextField
或UITextView
露出來(lái)霸琴。
第4步: 按照剛才算出的數(shù)值,我把topMostViewController.view.frame
向上移動(dòng)昭伸。
第5步: 如果收到了
UIKeyboardWillHideNotification
梧乘、UITextFieldTextDidEndEditingNotification
或UITextViewTextDidEndEditingNotification
這些鍵盤收起的通知,我仍然是從UIWindow.rootViewController
的 view 層級(jí)里面找到當(dāng)前位于最頂層的topMostViewController
庐杨。
第6步: 計(jì)算現(xiàn)在topMostViewController.view
應(yīng)該下移多少才能復(fù)原选调。
第7步: 根據(jù)剛才算出的數(shù)值,我把topMostViewController.view.frame
復(fù)原灵份。
第8步: 我會(huì)在 app 啟動(dòng)的時(shí)候初始化 IQKeyboardManager 這個(gè)單例仁堪,所以 app 里的每一個(gè)帶有UITextField
和UITextView
的地方都會(huì)自動(dòng)調(diào)整。
這些就是 IQKeyboardManager 所做的事填渠,你真的一行代碼都不用寫!! 只需要把相關(guān)的代碼文件拖到工程里就可以了弦聂。并且IQKeyboardManager 還支持橫豎屏旋轉(zhuǎn)、自動(dòng)顯示 UIToolBar揭蜒、讀取 keyboardDistanceFromTextField横浑,還有好多意想不到的功能~
原文地址:How to make a UITextField move up when keyboard is present
系列文集:爆棧熱門 iOS 問題
譯者:@戴倉(cāng)薯