В моем проекте есть контроллер представления, который встроен в контроллер панели вкладок. У этого контроллера представления есть кнопка, которая показывает ящик (представление слайда). Я использую эту стороннюю библиотеку для этого. Теперь я буду ссылаться на него как на контроллер панели.
![enter image description here](https://i.stack.imgur.com/MQrLA.png)
Этот контроллер вида панели представляет собой простой контроллер вида с прокруткой внутри. Scrollview имеет вид стека внутри него. Все остальные подпредставления (зеленый и оранжевый виды) размещаются в виде стека.
Оранжевый вид имеет текстовое поле внизу. Я написал приведенный ниже код для обработки событий клавиатуры, чтобы переместить текстовое поле над клавиатурой и обратно вниз.
@objc private func didReceiveKeyboardNotification(_ notification: Notification) {
if
let userInfo = notification.userInfo,
let endValue = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue,
let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,
let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt {
// Transform the keyboard's frame into our view's coordinate system
let endRect = view.convert(endValue.cgRectValue, from: view.window)
// Find out how much the keyboard overlaps the scroll view
// We can do this because our scroll view's frame is already in our view's coordinate system
let keyboardOverlap = scrollView.frame.maxY - endRect.origin.y
// Set the scroll view's content inset to avoid the keyboard
// Don't forget the scroll indicator too!
scrollView.contentInset.bottom = keyboardOverlap
scrollView.verticalScrollIndicatorInsets.bottom = keyboardOverlap
UIView.animate(withDuration: duration, delay: 0, options: UIView.AnimationOptions(rawValue: curve), animations: {
self.view.layoutIfNeeded()
}, completion: nil)
}
}
После того, как клавиатура закрыта, вид должен вернуться обратно в исходное положение. Проблема в том, что просмотр прокрутки не сбрасывается в исходное положение. Текстовое поле заканчивается ниже начальной позиции, как вы видите.
![enter image description here](https://i.stack.imgur.com/yIMiO.gif)
Я не могу понять, в чем здесь проблема.
Демонстрационный проект