使用TextField时,CGRectOffset动画出现异常

时间:2015-02-21 17:28:17

标签: ios xcode

任务是在用户完成编辑后移动文本字段。

现在,我在视图的中心有一个文本字段textfield和一个方法moveTextFieldToTheTop

以下是代码:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [_textField resignFirstResponder];
    return NO;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self moveTextFieldToTheTop];
}

- (void)moveTextFieldToTheTop
{
    [UIView animateWithDuration:0.3
                 animations:^{
                     _textField.frame = CGRectOffset(_textField.frame, 0, -100);
                 }];
}

不是从中心向上移动100px,textfield会以某种方式显示在中心下方100px并移动到中心位置。

我调试了代码,发现 [_textField resignFirstResponder];;是导致此问题的原因。

但我真的无法找出原因以及如何解决这个问题。

有人可以帮帮我吗?

更新

当我遇到这个问题时,我正在使用auto layout。如果我取消选中use auto layout,问题就解决了。

但有没有办法通过auto layout检查来解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用auto layout方法更改moveTextFieldToTheTop方法:

     - (void)moveTextFieldToTheTop
{
    //TODO update _textField's constraint to move _textField 100pt up
    [_textField setNeedsLayout];
    [UIView animateWithDuration:0.3
                 animations:^{
                     [_textField layoutIfNeeded];
                 }];
}

如果您正在使用storyboard,则将_textField的约束连接到视图控制器,并使用该约束更新代码TODO部分(您需要将约束.const属性更改为100)

<强>更新

以下是带文本字段的示例项目,只需运行示例,触摸文本字段即可打开键盘,然后按键盘上的return按钮。

https://www.dropbox.com/s/x138ta2uy1z3bbo/ToolBarhighlightproblem.zip?dl=0