IQKeyboardManager сделает это за вас, БЕЗ СТРОЧКИ КОДА , нужно только перетащить соответствующий исходный файл в проект. IQKeyboardManager также поддерживает ориентацию устройства , автоматическое управление UIToolbar , keyboardDistanceFromTextField и многое другое, чем вы думаете.

Вот блок-схема управления:

Шаг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согласно нарушенному расстоянию.
Шаг 8: - Создан экземпляр класса singleton IQKeyboardManager при загрузке приложения, поэтому каждый UITextField/ UITextViewв приложении будет автоматически настраиваться в соответствии с ожидаемым расстоянием перемещения.
Вот и все