为什么UITextField在resignFirstResponder上animation?

从iOS 8开始,表单中的UITextFieldsperformance得非常奇怪。 如果我点击另一个文本字段或按键盘上的Tab键,input的文字向上animation,然后迅速重新出现。 每次在视图加载之后,每隔一段时间就会发生。

它看起来像这样:

动画

我的代码如下所示:

#pragma mark - <UITextFieldDelegate> - (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == self.passwordTextField) { [self loginButtonClicked:nil]; } else if (textField == self.emailTextField) { [self.passwordTextField becomeFirstResponder]; } return YES; } 

编辑:

看起来像这个问题是由我的键盘监听器引起的:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; - (void)keyboardWillHide:(NSNotification *)sender { self.loginBoxBottomLayoutConstraint.constant = 0; [self.view layoutIfNeeded]; } - (void)keyboardWillShow:(NSNotification *)sender { CGRect frame = [sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect newFrame = [self.view convertRect:frame fromView:[[UIApplication sharedApplication] delegate].window]; self.loginBoxBottomLayoutConstraint.constant = CGRectGetHeight(newFrame); [self.view layoutIfNeeded]; } 

问题似乎是你正在执行一段代码

 -(void)keyboardWillShow:(NSNotification *)sender 

即使键盘已经激活,这也会导致一些失真。

一个小的解决方法是在调整帧之前检查键盘是否已经激活,如下所示

 bool isKeyboardActive = false; -(void)keyboardWillHide:(NSNotification *)sender { self.boxBottomConstraint.constant = 0; [self.view layoutIfNeeded]; isKeyboardActive = false; } -(void)keyboardWillShow:(NSNotification *)sender { if (!isKeyboardActive) { CGRect frame = [sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect newFrame = [self.view convertRect:frame fromView:[[UIApplication sharedApplication] delegate].window]; self.boxBottomConstraint.constant = CGRectGetHeight(newFrame); [self.view layoutIfNeeded]; isKeyboardActive = true; } } 

尝试这个

  - (void)textFieldDidEndEditing:(UITextField *)textField { [textField layoutIfNeeded]; } 

我猜应该解决你的问题。 在UITextField上得到了一些类似的post:当开始input时,文本字段弹起,然后反弹

TextField中的IOS8文本弹起焦点

让我知道如果我们仍然有问题

尝试在这个包装你的代码

 [UIView performWithoutAnimation:^{ // Changes we don't want animated here }];