[英]Text jumps when animating position of UITextField subclass
当我为我的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];
}];
我修好了。 将您的代码更改为此。 它会工作。
[UIView animateWithDuration:0.3
animations:^{
self.tableViewBottomSpaceConstraint.constant = 0;
self.mainLabelHeightConstraint.constant = 0;
self.subLabelTopSpaceConstraint.constant = 0;
self.postCodeFieldTopSpaceConstraint.constant = 12;
[self.view layoutSubviews];
}];
或者,如果这不起作用,那么而不是
[self.view layoutSubviews];
使用文本字段和layoutSubviews的父视图。 在我的情况下,这工作。 我认为这个答案有资格获得赏金。 谢谢。
编辑:
我找到了原因。 当我们尝试layoutIfNeeded时,它意味着它首先更改外部布局,然后更改其布局后更改UITextField的内部文本,因为我们没有强制更改该文本字段的所有子视图的布局。 毕竟UITextField由UIView和Label以及其他基本元素组成。 但是当我们尝试layoutSubviews同时改变所有子视图的布局时。 这就是为什么弹跳消失了。
由于某种原因,在触发动画之前,您的UI未处于已设置状态。
尝试添加对[self.view layoutIfNeeded];
的调用[self.view layoutIfNeeded];
在动画块之前,使用[self.view layoutIfNeeded];
在你的块结束而不是[self.view layoutSubviews];
在这种情况下不应该真正使用它。
对于iOS 9或更高版本,这可以解决问题
Objective-C的:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[textField layoutIfNeeded]; //Fixes iOS 9 text bounce glitch
//...other stuff
}
迅速:
func textFieldDidEndEditing(_ textField: UITextField) {
textField.layoutIfNeeded() //Fixes iOS 9 text bounce glitch
//...other stuff
}
谷歌把我带到了这里。 根据@Mahesh Agrawal的回答,@ Andy评论链接到Here的链接,这是我能找到的最佳解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.