多次触发时,我的软键盘上的高度会发生变化
The height on my soft keyboard changes when triggered multiple times
我有一个观察到的方法,它会在显示 soft keyboard
时触发。它工作正常,但由于某种原因 soft keyboard
的 height
在隐藏后发生变化,然后第二次显示。我找不到原因,而且 hide-delegate 中似乎没有任何东西可以改变它的值。是什么原因造成的?我已经通过存储高度然后第二次使用它解决了这个问题,但我想知道这个问题的原因。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect visibleRect = self.view.frame;
if (_storedKeyboardHeight.size.height == 0) {
_storedKeyboardHeight.size.height = keyboardSize.height;
}
visibleRect.size.height = _storedKeyboardHeight.size.height;
visibleRect.origin.y = self.view.height - visibleRect.size.height;
CGRect rectOfCellInTableView = [self.loginTableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
//This changes the second time
NSLog(@" %f", keyboardSize.height);
//so I store the original value here
NSLog(@" %@", CGRectCreateDictionaryRepresentation(_storedKeyboardHeight));
if ((rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) > visibleRect.origin.y){
CGPoint scrollPoint = CGPointMake(0.0, (rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) - visibleRect.origin.y + 50);
[self.loginTableView setContentOffset:scrollPoint animated:YES];
}
}
第一次身高291,第二次身高233。
问题是您正在检查错误的框架:
UIKeyboardFrameBeginUserInfoKey
显示键盘时,在显示过程开始它的frame height是多少,你没兴趣。你想知道的是显示过程结束的帧:
UIKeyboardFrameEndUserInfoKey
此外,您收到的通知似乎有误。您没有显示您注册的是什么通知,但是您的方法名称 keyboardWasShown
表明您在键盘 did 显示时收到通知。那太晚了;此通知几乎从不引起任何兴趣。您想知道键盘 何时会 显示。
我有一个观察到的方法,它会在显示 soft keyboard
时触发。它工作正常,但由于某种原因 soft keyboard
的 height
在隐藏后发生变化,然后第二次显示。我找不到原因,而且 hide-delegate 中似乎没有任何东西可以改变它的值。是什么原因造成的?我已经通过存储高度然后第二次使用它解决了这个问题,但我想知道这个问题的原因。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect visibleRect = self.view.frame;
if (_storedKeyboardHeight.size.height == 0) {
_storedKeyboardHeight.size.height = keyboardSize.height;
}
visibleRect.size.height = _storedKeyboardHeight.size.height;
visibleRect.origin.y = self.view.height - visibleRect.size.height;
CGRect rectOfCellInTableView = [self.loginTableView rectForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]];
//This changes the second time
NSLog(@" %f", keyboardSize.height);
//so I store the original value here
NSLog(@" %@", CGRectCreateDictionaryRepresentation(_storedKeyboardHeight));
if ((rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) > visibleRect.origin.y){
CGPoint scrollPoint = CGPointMake(0.0, (rectOfCellInTableView.origin.y + rectOfCellInTableView.size.height) - visibleRect.origin.y + 50);
[self.loginTableView setContentOffset:scrollPoint animated:YES];
}
}
第一次身高291,第二次身高233。
问题是您正在检查错误的框架:
UIKeyboardFrameBeginUserInfoKey
显示键盘时,在显示过程开始它的frame height是多少,你没兴趣。你想知道的是显示过程结束的帧:
UIKeyboardFrameEndUserInfoKey
此外,您收到的通知似乎有误。您没有显示您注册的是什么通知,但是您的方法名称 keyboardWasShown
表明您在键盘 did 显示时收到通知。那太晚了;此通知几乎从不引起任何兴趣。您想知道键盘 何时会 显示。