当UITextField为密码类型,iOS13及以后系统,当输入完密码以后,系统会弹出存储密码的系统弹窗,此时不乱是否存储密码,在当次使用(意思是没有在后台杀死APP之前)过程中,键盘弹出以后,对于键盘frame监听是异常的,以下为iPhoneX的数据,且选取键盘监通知为key值为keyboardViewFrameDidChangeEnd
,即[notify.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]
,其中 notifty
为NSNotification *
类型
UIKeyboardWillChangeFrameNotification
弹出:
没问题
keyboardViewFrameDidChangeEnd,---{{0, 550}, {414, 346}}
有问题
keyboardViewFrameDidChangeEnd,---{{-207, -346}, {414, 346}}
keyboardViewFrameDidChangeEnd,---{{0, -303}, {648, 303}}
UIKeyboardWillChangeFrameNotification
收起没问题
keyboardViewFrameDidChangeEnd,---{{0, 896}, {414, 346}}
keyboardViewFrameDidChangeEnd,---{{0, 896}, {414, 243}}
有问题
keyboardViewFrameDidChangeEnd,---{{0, 0}, {648, 303}}
keyboardViewFrameDidChangeEnd,---{{324, 0}, {0, 243}}
UIKeyboardWillShowNotification
没有问题
keyboardViewFrameDidChangeEnd--show{{0, 550}, {414, 346}}
有问题
keyboardViewFrameDidChangeEnd--show{{-207, -346}, {414, 346}}
keyboardViewFrameDidChangeEnd--show{{0, -303}, {648, 303}}
UIKeyboardWillHideNotification
没有问题
keyboardViewFrameDidChangeEnd--hidden{{0, 896}, {414, 346}}
有问题
keyboardViewFrameDidChangeEnd--hidden{{0, 0}, {648, 303}}
keyboardViewFrameDidChangeEnd--hidden{{324, 0}, {0, 243}}
大致影响的是Y值,且通知的回调次数,有问题的回调数据都有异常,大致表象为Y值为负值,我们知道,键盘最小的y值为,屏幕高度 减去 键盘高度,最大为屏幕高度,所以也可以简单的依据此进行数据的修正
此问题是在ios13系统产生,因为存储密码的功能是在ios13产生,且目前在ios15的15.0.2还没有修复