iOS 8获得键盘高度

时间:2014-09-30 00:21:50

标签: ios iphone ios8

我无法可靠地获得键盘的实际高度。我正在添加一个自定义工具栏,它意味着直接放在键盘上方。为了实现布局约束,我在屏幕底部和工具栏底部之间添加了一个静态空间约束。当键盘显示时,我将此约束修改为键盘的高度,这在iOS 8中会有很大差异。

为了调整间隔符的大小,我目前使用以下方法在UIKeyboardDidShowNotification

上触发
-(void)keyboardDidShow:(NSNotification*)notification
{
   CGFloat height = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].height;

   self.shimConstraint.constant = height;
   [self.view layoutIfNeeded];
}

这有时会正确调整约束,但通常返回的键盘高度完全不正确。一旦显示键盘,可靠地获得键盘高度的最佳方法是什么?

编辑:应用程序允许用户在许多不同的输入字段之间切换。其中一些禁用了自动更正,因此自动更正栏可能隐藏也可能不隐藏,切换字段时返回不正确的高度。

3 个答案:

答案 0 :(得分:35)

您这样做的方式是正确的,但您可能希望使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。最终用户键是键盘完成动画和屏幕时的框架,因此你知道它将是那个框架,而开始键可能并不总是与键盘框架显示时相匹配。

可能还需要额外考虑设备的方向,我没有考虑过,但对于肖像,它应该有用。

答案 1 :(得分:8)

执行此操作的正确方法是使用UITextField的inputAccesorryView属性。

无论键盘大小如何,inputAccessoryView都会自动添加到键盘上方。

正如文件所述:

  

此属性的默认值为nil。将视图分配给此属性会导致该视图显示在标准系统键盘上方(如果提供了一个,则显示在自定义输入视图上方),当文本字段成为第一个响应者时。例如,您可以使用此属性将自定义工具栏附加到键盘

在此处查看更多信息 https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html

答案 2 :(得分:0)

您可能需要[self.view setNeedsLayout]代替[self.view layoutIfNeeded]