#ios #swift #keyboard
#iOS #swift #клавиатура
Вопрос:
Клавиатура добавляется в качестве вложенного представления в контейнер в нижней части контроллера представления коллекции, но при попытке скрыть ее кажется, что загрузка клавиатуры происходит быстрее, чем увеличение размера представления (темный экран появляется сразу после того, как клавиатура будет скрыта). Кроме того, при запуске проекта в первый раз за день клавиатура не отображается, пока я не нажму «command K», после чего над клавиатурой и под вводом появляется темный вид, так как размер клавиатуры отображается.
@objc func handleShowKeyboard(_ notification: Notification) {
if let keyboaradSize: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue? {
let keyboardFram = keyboaradSize.cgRectValue
UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
self.view.frame.origin.y -= self.view.safeAreaInsets.bottom
self.view.frame.origin.y -= keyboardFram.height
self.view.layoutIfNeeded()
}) { (completion) in
}
}
}
@objc func handleHideKeyboard(_ notification: Notification) {
if let keyboaradSize: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue? {
let keyboardFram = keyboaradSize.cgRectValue
UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
self.view.frame.origin.y = self.view.safeAreaInsets.bottom
self.view.frame.origin.y = keyboardFram.height
self.view.layoutIfNeeded()
}) { (completion) in
}
}
}
Ответ №1:
Прочитайте этот ключ
UIKeyboardAnimationDurationUserInfoKey
значение и используйте его в качестве продолжительности анимации
guard let userInfo = notification.userInfo else {
return
}
guard let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,
let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else {
return
}
UIView.animate(withDuration: duration, delay: 0, options: [UIView.AnimationOptions(rawValue: curve)], animations: {
///
}) { (completed) in
}