Add scrollView in your Hole View (ViewController view)
and then add notifications for hiding and showing keyboard
when keyboard will show change the scrollView Content insets by minusing keyboard hide: scrollView.ContentInsets.height - keyboard.height:
func registerForKeyboardNotifications() {
//Adding notifies on keyboard appearing
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIWindow.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIWindow.keyboardWillHideNotification, object: nil)
}
@objc
func keyboardWillShow(notification: NSNotification) {
guard let keyboareRect = notification.userInfo?[UIWindow.keyboardFrameBeginUserInfoKey] as? CGRect else { return }
let keyboardSize = keyboareRect.size
let insets = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
scrollView.contentInset = insets
scrollView.scrollIndicatorInsets = insets
var aRect = self.view.frame
aRect.size.height -= keyboardSize.height
guard let activeTextField = self.activeTextField else { return }
if !aRect.contains(activeTextField.frame.origin) {
scrollView.scrollRectToVisible(activeTextField.frame, animated: true)
}
}
@objc
func keyboardWillHide(notification: NSNotification) {
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero
}