UIView自动移动uitextfield键盘

所以我手上有一个很奇怪的问题,search时间一点也不提供。

我有一个包含uitextfield的uview。 现在最初这个视图在可见屏幕之外,坐标如x = -500,y = -500。

但是,按一个button按下此视图animation并移动到屏幕的中心。

现在,每当我点击这个视图的子视图的uitextfield时,这个视图就会移回到它在屏幕之外的原始坐标。

我疯狂地检查了我的代码,没有任何东西在外面再次移动视图。任何帮助解释这个非常陌生的行为将非常感激。

该代码将视图移动到屏幕上

- (IBAction)Register:(id)sender { //(self.view.frame.size.width/2)-(self.SignUp_Screen.frame.size.width/2); //self.login_Screen.hidden = YES; self.blurView.hidden = NO; //self.SignUp_Screen.layer.zPosition = 5; NSLog(@"Register"); self.SignUp_Screen.hidden = NO; [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ self.SignUp_Screen.frame = CGRectMake(35, 50,self.SignUp_Screen.frame.size.width , self.SignUp_Screen.frame.size.height); } completion:^(BOOL finished) { }]; } 

这些是textfield的委托方法

 -(void)textFieldDidEndEditing:(UITextField *)textField { NSLog(@"TextFieldEndEditing"); [textField resignFirstResponder]; } -(BOOL)textFieldShouldReturn:(UITextField *)textField { NSLog(@"textFieldShouldReturn"); [textField resignFirstResponder]; return YES; } 

正如Wezly所暗示的,如果您使用的是自动布局,则不会再直接修改该框架。 那是旧世界。 你想有一个出口/财产的约束和animation。

 [UIView animateWithDuration:0.25 animations:^{ SignUp_Screen.centerXConstraint.constant = ...; SignUp_Screen.centerYConstraint.constant = ...; [SignUp_Screen layoutIfNeeded]; }]; 

看到这里和这里的更多细节。

如果您使用自动布局,则不应该修改框架。 您应该通过animation约束的常量来激活视图。 例如:

 NSLayoutConstraint *viewY; //constraint from superview top to view top viewY.constant = 100; [self.view setNeedsUpdateConstraints]; [UIView animateWithDuration:0.3f animations:^{ [self.view layoutIfNeeded]; }]; 

我解决这个问题的方法是通过将IBOutlet链接到我想要更改的约束,然后将其设置为constant值。

。H

 @interface ViewController : UIViewController { IBOutlet NSLayoutConstraint *constraintHandle; } 

.M

 [UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ constraintHandle.constant = self.view.center.x; [SignUp_Screen layoutIfNeeded]; } completion:^(BOOL finished) { }]; 

不要忘记将IBOutlet链接到故事板或xib中的约束条件。