问题 在没有UIKeyboardWillShowNotification的情况下获取键盘大小


我想在不使用键盘通知的情况下获得键盘的大小。原因是我在视图上有几个文本字段,我不需要调整视图的大小 所有 正如我在几乎每个例子中看到的那样。我只需要调整一些文本字段/视图的视图大小 背后 编辑时的键盘。所以我正在使用 textFieldDidBeginEditing 和 textFieldDidEndEditing 方法,因为在这里我知道正在编辑的文本字段。另一个问题是即使我订阅键盘通知了 UIKeyboardWillShowNotification 被解雇了 textFieldDidBeginEditing 所以我无法在第一次激活时获得键盘大小。我假设没有提供实际文本字段或视图可用的键盘通知功能的信息。

The following code works but I need the keyboard size:

- (void) textFieldDidBeginEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, -216);
    [UIView commitAnimations];
  }
}

- (void) textFieldDidEndEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, +216);
    [UIView commitAnimations];
  }
}

7069
2017-08-02 09:43


起源

可能重复 获取iOS键盘的高度而不显示键盘 - Duncan Babbage
@DuncanBabbage如果重要的话:那个问题问题比我的问题要晚3年?万一它没有:是的 - gyozo kudor
是的,你的第一个发布了。标记重复项的目的是将qs和de-duplicate链接在一起,以帮助用户找到高质量的答案。另一个q有一个简单的解决方案。在解决了这个问题后,我在那里写了一个高质量的答案,以帮助未来的人们面对这个问题。之后找到您的问题,将其标记为其他几个重复项。标准是指导人们的最佳答案,而不是首先发布。在这种情况下,q没有收到任何有效的答案。我建立在对另一个q的答案的基础上,所以无论如何我都会在那里张贴。不会对你产生负面影响! - Duncan Babbage


答案:


我仍然使用通知但不是您指定的通知。也许这会更好?只是想帮忙,我明白这些事情是多么令人沮丧。

viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWasShown:)
                                         name:UIKeyboardDidShowNotification
                                       object:nil];
 //For Later Use
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWillHide:)
                                         name:UIKeyboardWillHideNotification
                                       object:nil];
}

- (void)keyboardWasShown:(NSNotification *)notification {
  // Get the size of the keyboard.
  CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

编辑:这可能有助于区分非活动的活动文本字段

- (void)textFieldDidBeginEditing:(UITextField *)textField {
self.activeTextField = textField;
}


- (void)textFieldDidEndEditing:(UITextField *)textField{
self.activeTextField = nil;
}

15
2017-08-02 13:58



这如何解决OP的问题?问题仍然存在。 - Bourne
keyboardWasShown在文本字段委托之前调用2 - kemdo