when how appears ios objective-c uikeyboard nsnotification

ios - how - scrollview textfield swift



La aplicación "Gboard" de iOS, la altura de notificación de UIKeyboard es incorrecta o no es válida (1)

Estoy intentando mover la vista hacia arriba cuando el teclado aparece sobre el campo de UITextfield la UITextfield que se encuentra en UIScrollView . Estoy usando UIKeyboardWillShowNotification y UIKeyboardWillHideNotification para esto.

Funciona perfectamente cuando iOS Keyboard donde obtengo la altura 297 .

Mi cliente está usando el Gboard keyboard , se quejó de que la vista no se está moviendo. Cuando lo probé, obtengo la altura del teclado en 44 .

He intentado las dos claves UIKeyboardFrameBeginUserInfoKey y UIKeyboardFrameEndUserInfoKey para el objeto de NSNotifiction userInfo . Ambos están dando 44 solamente.

Intenté con UIKeyboardDidShowNotification y UIKeyboardDidHideNotification también, sigue siendo el mismo problema.

Alguien podría ayudarme con esto..?


NO UNA RESPUESTA, pero solo aquí b / c es demasiado largo para pegar en el comentario. Aquí está mi código para obtener la altura del teclado @iMHitesh:

class KeyboardShiftAnimator { fileprivate let showAnimation: (_ keyboardHeight: CGFloat) -> Void fileprivate let hideAnimation: (Void) -> Void fileprivate weak var ownerController: UIViewController! fileprivate let disableAnimations: Bool deinit { NotificationCenter.default.removeObserver(self) } init(ownerController: UIViewController, disableAnimations: Bool = false, showAnimation: @escaping (_ keyboardHeight: CGFloat) -> Void, hideAnimation: @escaping (Void) -> Void) { self.showAnimation = showAnimation self.hideAnimation = hideAnimation self.ownerController = ownerController self.disableAnimations = disableAnimations NotificationCenter.default.addObserver( self, selector: #selector(KeyboardShiftAnimator.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil ) NotificationCenter.default.addObserver( self, selector: #selector(KeyboardShiftAnimator.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil ) } func makeAppropriateLayout(_ duration: NSNumber) { if self.disableAnimations { UIView.performWithoutAnimation({ self.ownerController.view.setNeedsUpdateConstraints() self.ownerController.view.updateConstraintsIfNeeded() self.ownerController.view.layoutIfNeeded() }) } else { self.ownerController.view.setNeedsUpdateConstraints() self.ownerController.view.updateConstraintsIfNeeded() UIView.animate(withDuration: duration.doubleValue, animations: { () -> Void in self.ownerController.view.layoutIfNeeded() }) } } @objc func keyboardWillShow(_ note: Foundation.Notification) { guard let endFrameValue = (note as NSNotification).userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue, let animationDuration = (note as NSNotification).userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber else { return } let keyboardHeight = endFrameValue.cgRectValue.size.height showAnimation(keyboardHeight) makeAppropriateLayout(animationDuration) } @objc func keyboardWillHide(_ note: Foundation.Notification) { let animationDuration = (note as NSNotification).userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber let duration = animationDuration != nil ? animationDuration!.doubleValue : 0.25 hideAnimation() makeAppropriateLayout(NSNumber(value: duration)) } }