当键盘显示工作,除了当ipad转身时,移动对话框

模式对话框在键盘出现时向上移动,在键盘消失时向下移动。

一切都很好,直到我旋转iPad。 除了标准以外的其他任何方向都行不通。 当iPad被翻转时,当键盘出现时,模式对话框向下移动,而不是在键盘消失而不是向下时向上和向上。

这是我用来定位模式对话框时,键盘出现/消失的代码。

- (void)textFieldDidBeginEditing:(UITextField *)textField { self.view.superview.frame = CGRectMake(self.view.superview.frame.origin.x, 140, self.view.superview.frame.size.width, self.view.superview.frame.size.height); } }]; } -(void)textFieldDidEndEditing:(UITextField *)textField { [UIView animateWithDuration:0.4 animations:^ { self.view.superview.frame = CGRectMake(self.view.superview.frame.origin.x, 212, self.view.superview.frame.size.width, self.view.superview.frame.size.height); } }]; } 

例如使用CGAffineTransformTranslate来代替设置框架,例如:

 - (void)textFieldDidBeginEditing:(UITextField *)textField { self.view.superview.transform = CGAffineTransformTranslate(self.view.superview.transform,0,72); } }]; } -(void)textFieldDidEndEditing:(UITextField *)textField { [UIView animateWithDuration:0.4 animations:^ { self.view.superview.transform = CGAffineTransformTranslate(self.view.superview.transform,0,-72); } }]; } 

你应该尝试使用键盘通知:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeDismissed:) name:UIKeyboardWillHideNotification object:nil]; 

然后在select器中调整框架。 不在textFieldDidBeginEditing / textFieldDidEndEditing中。

 - (void)keyboardWasShown:(NSNotification *) notification { NSDictionary *info = [notification userInfo]; NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey]; CGSize keyboardSize = [aValue CGRectValue].size; keyboardHeight = MIN(keyboardSize.height, keyboardSize.width); // set new frame based on keyboard size - (void)keyboardWillBeDismissed: (NSNotification *) notification{ [UIView animateWithDuration:0.4 animations:^{ // original frame }]; }