IQKeyboardManager зробить це для вас, БЕЗ ЛІНІЇ КОДУ , потрібно лише перетягнути відповідний вихідний файл до проекту. IQKeyboardManager також підтримує орієнтацію на пристрої , автоматичне управління панеллю UITool , клавіатураDistanceFromTextField та багато іншого, ніж ви думаєте.

Ось схема управління потоком:

Шаг1: - Додані глобальні повідомлення про UITextField, UITextViewі UIKeyboardв одноплодной класі. Я назвав це IQKeyboardManager .
КРОК 2: - Якщо буде встановлено UIKeyboardWillShowNotification, UITextFieldTextDidBeginEditingNotificationчи UITextViewTextDidBeginEditingNotificationповідомлень, а потім спробувати отримати topMostViewControllerекземпляр з UIWindow.rootViewControllerієрархії. Для правильного розкриття UITextField/ UITextViewна ньому topMostViewController.viewкадр потрібно відкоригувати.
Крок 3: - Обчислена очікувана відстань переміщення topMostViewController.viewвідносно першої відповіді UITextField/ UITextView.
Крок 4: - Рухається topMostViewController.view.frameвгору / вниз відповідно до очікуваної відстані переміщення.
Крок 5: - Якщо буде встановлено UIKeyboardWillHideNotification, UITextFieldTextDidEndEditingNotificationчи UITextViewTextDidEndEditingNotificationповідомлення, а потім знову спробувати отримати topMostViewControllerекземпляр з UIWindow.rootViewControllerієрархії.
Крок 6: - Обчислена порушена відстань, topMostViewController.viewяку потрібно відновити у вихідне положення.
Крок 7: - Відновлено topMostViewController.view.frameвниз відповідно до порушеної відстані.
Step8: - конкретизований одноточечного IQKeyboardManager екземпляра класу на додатку навантаження, тому кожен UITextField/ UITextViewв додатку буде автоматично підлаштовуватися в залежності від очікуваного відстані переміщення.
Це все