animationUITextField子类的位置时文本跳转
当我animation我的UITextField
子类的位置时,字段中的文本跳转到UITextField
的位置,这是非常震惊,我不知道为什么会发生:
我的子类在文本字段的右侧添加一个button,当点击时调用视图控制器上的一个方法,该方法改变文本字段的边界颜色,并通过改变文本字段的顶部空间约束将文本字段移动到屏幕上,和上面的一些其他意见。
[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的父视图。 在我的情况下,这工作。 我认为这个答案有资格获得赏金。 谢谢。
编辑:
我find了这个原因。 当我们试图layoutIfNeeded时,它意味着它首先改变了外部布局,在它改变了它的布局之后,它改变了UITextField的内部文本,因为我们没有强制地改变该文本字段的所有子视图的布局。 毕竟UITextField是由UIView和Label和其他基本元素组成的。 但是,当我们试图layoutSubviews同时改变所有子视图的布局。 这就是为什么反弹消失了。
它看起来像是由于某种原因,你的用户界面在animation被触发之前没有处于稳定状态。
尝试添加对[self.view layoutIfNeeded];
的调用[self.view layoutIfNeeded];
在你的animation块之前,并使用[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 }
Google把我带到这里。 在@Mahesh Agrawal的回答下,@Andy评论了一个链接到这里的链接,这是我能find的最好的解决scheme。