键盘出现时,对象返回原始位置(动画后)

时间:2015-02-17 16:39:51

标签: ios objective-c animation keyboard autolayout

我有这个奇怪的新问题:这段代码(完美无缺)

[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
        CGRect frame = _logoClaim.frame;
        frame.origin.y -= 180;
        _logoClaim.frame = frame;
    } completion:NULL];

将包含UIImageView和UILabel的视图移动到self.view的顶部。

移动的视图取消隐藏UITextField。 当我尝试将文本写入UITextField时,显然会出现键盘。 此时,之前动画的视图返回到原始的开始位置!!!

是什么原因?

2 个答案:

答案 0 :(得分:1)

在动画中放置一个完成块并检查完成的值。键盘正在取消动画,完成的bool将为NO。我会在UITextField中禁用输入,直到动画完成。在完成块中执行此操作。

修改 看着你的持续时间并重新阅读这个问题,我可能会误认为你的意思。如果这个答案不正确,我会将其删除。

另外,搜索代码中的_logoClaim.frame,以防你在onKeyboardWillAppear上调整它

答案 1 :(得分:0)

您需要为其底部/顶部空间约束创建插座,并在动画块内更新它的常量值。

[UIView animateWithDuration:0.4 
...
animations:^{
    /*Update the value of the constraint outlet supposing it to be a bottom space constraint*/
    _layoutConstraintBottom += 180;
    [self.logoClaim layoutIfNeeded];
} completion:NULL];

不要忘记为动画视图调用-layoutIfNeeded。