У меня возникла проблема, из-за которой использование convertRect
для правильного отчета о любой позиции, используемой для вычисления contentInset
, не работает в iOS 12. Этот подход использовался для работы в более ранних версиях iOS:
@objc func keyboardVisibilityChanged(notification: Notification) {
guard let userInfo = notification.userInfo else {
assertionFailure()
return
}
let keyboardScreenEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let keyboardViewEndFrame = scrollView.convert(keyboardScreenEndFrame, from: view.window!)
if notification.name == UIResponder.keyboardWillHideNotification {
scrollView.contentInset = .zero
scrollView.scrollIndicatorInsets = .zero
} else {
let insets = UIEdgeInsets(top: 0, left: 0, bottom: (keyboardViewEndFrame.origin.y - keyboardViewEndFrame.size.height) , right: 0)
scrollView.contentInset = insets
scrollView.scrollIndicatorInsets = insets
}
}
Однако этот код, хотя и дает чрезвычайно близкие визуальные результаты, не является точным, а также не работает на iPhone, где модальное изображение представлено в полноэкранном режиме.