运行 动画后文本字段 Returns 到原始位置

Text Field Returns to Original Location after Running Animation

我正在尝试在按下按钮时向右移动文本字段。它工作正常,但是当我单击另一个文本字段或任何其他元素时,文本字段会重新出现在其当前位置。我浏览了互联网,发现当我没有启用自动布局时它可以工作,但是我需要自动布局来设置可变位置。有什么建议吗?下面是移动盒子的方法:

- (IBAction)EnterInfo:(id)sender {
    CGRect newFrame = _UsernameField.frame;
    newFrame.origin.x += 500;    // shift right by 500pts
    [UIView animateWithDuration:1.0
                     animations:^{
                         _UsernameField.frame = newFrame;
                     }];
}

最后一个问题的新代码:

- (IBAction)EnterInfo:(id)sender {
    [UIView animateWithDuration:1.0
                     animations:^{
                         _usernameX.constant = 130;
                     }];
}

如果你打开了自动布局,你就不能那样操作框架。您需要引用 NSLayoutConstraint 并更新常量。

像这样:

myXConstraint.constant = originalX + 500;

编辑 -- 然后您的动画块应该如下所示:

[UIView animateWithDuration:0.5 animations:^{
    [self.view layoutIfNeeded];
}];