override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(KeyBoard), name: UIResponder.keyboardDidHideNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(KeyBoard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
}
@objc func KeyBoard(notification: Notification){
let userInfo = notification.userInfo!
let keyBoardScreenEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let keyBoardViewEndFrame = view.convert(keyBoardScreenEndFrame, from: view.window)
if notification.name == UIResponder.keyboardWillHideNotification{
print("HIDE KEYBOARD")
scrollView.contentInset = UIEdgeInsets.zero
} else {
scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyBoardViewEndFrame.height, right: 0)
}
scrollView.scrollIndicatorInsets = scrollView.contentInset
}
/*Close keyboard*/
@IBAction func hideKeyBoard(_ sender: UITapGestureRecognizer) {
view.endEditing(true)
scrollView.contentInset = UIEdgeInsets.zero
print("HIDE KEYBOARD2")
}
/*END Close keyboard*/
Вот так двигаю контент при открытии клавиатуры - все работает.
Но после закрытия клавиатуры добавляется пространство ниже первоначального экрана, на котором уже нет ScrollView. Как избавиться от добавленного размера (красный квадрат)?
Когда пролистывание вниз (тянуть экран вниз), то поле встает на свое первоначальное место и скролл работает на весь экран, а когда пролистываешь вверх, то появляется свободное место и скролл не на весь экран (скриншот).
Самый последний скриншот - это как выглядит экран при открытии приложения, т.е скролл ненамного больше экрана телефона, поле находится внизу скролла.
UPD. При первом нажатии скрывается клавиатура, но остается дополнительный экран, при повторном нажатии на экран убирается этот доп экран. Почему не срабатывает при первом нажатии скрытие клавиатуры и убирание лишнего места на экране?