在动画UITextField子类的位置时文本跳转

And*_*vis 13 iphone animation objective-c uitextfield ios

当我为UITextField子类的位置设置动画时,字段中的文本与UITextField保持它的位置跳出一步,这非常刺耳,我无法弄清楚它为什么会发生: 之前 中 中 中 结束

我的子类在文本字段的右侧添加一个按钮,当点击时调用视图控制器上的方法,该方法更改文本字段边框颜色并通过更改文本字段的顶部空间约束将文本字段向上移动,以及位于其上方的其他几个视图.

[UIView animateWithDuration:0.3
                     animations:^{
                         self.tableViewBottomSpaceConstraint.constant = 0;
                         self.mainLabelHeightConstraint.constant = 0;
                         self.subLabelTopSpaceConstraint.constant = 0;
                         self.postCodeFieldTopSpaceConstraint.constant = 12;
                         [self.view layoutIfNeeded];

                     }];
Run Code Online (Sandbox Code Playgroud)

Mah*_*wal 11

我修好了.将您的代码更改为此.它会工作.

[UIView animateWithDuration:0.3
                 animations:^{
                     self.tableViewBottomSpaceConstraint.constant = 0;
                     self.mainLabelHeightConstraint.constant = 0;
                     self.subLabelTopSpaceConstraint.constant = 0;
                     self.postCodeFieldTopSpaceConstraint.constant = 12;
                     [self.view layoutSubviews];

                 }];
Run Code Online (Sandbox Code Playgroud)

或者,如果这不起作用,那么而不是

[self.view layoutSubviews];
Run Code Online (Sandbox Code Playgroud)

使用文本字段和layoutSubviews的父视图.在我的情况下,这工作.我认为这个答案有资格获得赏金.谢谢.

编辑:

我找到了原因.当我们尝试layoutIfNeeded时,它意味着它首先更改外部布局,然后更改其布局后更改UITextField的内部文本,因为我们没有强制更改该文本字段的所有子视图的布局.毕竟UITextField由UIView和Label以及其他基本元素组成.但是当我们尝试layoutSubviews同时改变所有子视图的布局时.这就是为什么弹跳消失了.