在iOS 11 beta 7上测试我的应用程序 - 如果我的UIViewController,键盘似乎没有推高内容。
代码看起来像这样(从iOS7开始工作):
- (void)handleNotification:(NSNotification*)notification {
if (notification.name == UIKeyboardWillShowNotification) {
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
nextButtonALBottomDistance.constant = keyboardSize.height + initialPhoneBottomDistance;
codeBottomViewALBottomDistance.constant = keyboardSize.height + initialCodeBottomDistance;
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView animateWithDuration:animationDuration animations:^{
[self.view layoutIfNeeded];
}];
}
else if (notification.name == UIKeyboardWillHideNotification) {
nextButtonALBottomDistance.constant = initialPhoneBottomDistance;
codeBottomViewALBottomDistance.constant = initialCodeBottomDistance;
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView animateWithDuration:animationDuration animations:^{
[self.view layoutIfNeeded];
}];
}
}
有趣的是 - 当我按下主页按钮(最小化应用程序)并重新打开它(没有杀死它)时 - 布局是固定的。
这似乎是一个iOS 11测试版的错误,但到目前为止我找不到它的任何参考。
很高兴知道其他人是否有这个问题。
答案 0 :(得分:10)
使用 UIKeyboardFrameEndUserInfoKey ,因为该键适用于包含CGRect的NSValue对象,该CGRect用于在屏幕坐标中标识键盘的结束帧。 不要使用UIKeyboardFrameBeginUserInfoKey 。
答案 1 :(得分:3)
如果您使用 UIKeyboardFrameBeginUserInfoKey 键获取键盘高度,请将其替换为 UIKeyboardFrameEndUserInfoKey 以获取正确的密码键盘高度。
在iOS 11中, UIKeyboardFrameBeginUserInfoKey 键的帧的高度值为0,因为它是一个起始帧。要获得实际高度,我们需要结束帧,并且 UIKeyboardFrameEndUserInfoKey 返回结束帧。
请参阅管理键盘documentation:
UIKeyboardFrameBeginUserInfoKey 包含a的NSValue对象的键 标识起始帧的CGRect 屏幕坐标中的键盘 这些坐标不需要考虑 应用任何轮换因素 因此,窗口的内容 界面方向的变化。 因此,您可能需要转换 矩形到窗口坐标(使用 convertRect:fromWindow:method)或 查看坐标(使用 convertRect:fromView:method)之前 使用它。
UIKeyboardFrameEndUserInfoKey 密钥 对于包含a的NSValue对象 标识结束框的CGRect 屏幕坐标中的键盘 这些坐标不需要考虑 应用任何轮换因素 因此,窗口的内容 界面方向的变化。 因此,您可能需要转换 矩形到窗口坐标(使用 convertRect:fromWindow:method)或 查看坐标(使用 convertRect:fromView:method)之前 使用它。
答案 2 :(得分:1)
我也遇到了这个非运动问题。我怀疑开始&结束帧总是不正确的,因为它们是相同或几乎相同的,但最近在iOS 11中被修复,因此打破了很多代码,这些代码并没有真正理解这两个帧之间的差异。
根据此处的信息 https://stackoverflow.com/a/14326257/5282052
开始是键盘开始看起来像,大多数人不想要的。 结束是键盘外观的结果,这是大多数人唯一关心的问题。
[[[user userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] .size;
确实通过滚动视图的ZERO运动解决了我的问题。