我遇到了问题:我有一个非常简单的自定义yum install php-soap
,其中包含一个UIView
和一个UITextField
。
UILabel
位于UILabel
,我希望当用户开始编辑UITextField
时,UILabel
最多可达40px。
我使用约束来设置文本字段的框架和标签的框架。
因此,我只需使用UITextField
协议在自定义视图中设置委托,并实现委托方法:UITextFieldDelegate
,如下所示:
我只是在委托方法中设置标签的约束(中心Y)。
textFieldDidBeginEditing
func textFieldDidBeginEditing(textField: UITextField) {
self.centerVerticallyLabelConstraint.constant = -40
UIView.animateWithDuration(0.5) {
self.textFieldLabel.layoutIfNeeded()
}
}
正确上升,但会立即上升。它会忽略动画中UILabel
的持续时间。我不知道为什么:
我没有同时制作其他动画,我只有这个动画。
我没有停用0.5
的动画
代理人设置为我的UIView.
。
有什么想法吗?
答案 0 :(得分:9)
尝试在视图上调用layoutIfNeeded而不是textview。
UIView.animateWithDuration(0.5) {
self.view.layoutIfNeeded()
}
希望这有帮助。
答案 1 :(得分:0)
尝试使用以下代码执行:
func textFieldDidBeginEditing(textField: UITextField) {
UIView.animateWithDuration(0.5) {
self.textFieldLabel.frame.origin.y -= 40
}
}
答案 2 :(得分:0)
需要致电self.view.layoutIfNeeded()
而不是self.textFieldLabel.layoutIfNeeded()
感谢
答案 3 :(得分:0)
对我来说,问题似乎是因为我已经在主线程上,并且在GCD main.async调用中调用了动画块。
我有
df_raw
该视图可对移动进行动画处理,但不会在2.0秒内逐渐进行动画处理。卸下外部df_subset
可解决此问题。