任务是在用户完成编辑后移动文本字段。
现在,我在视图的中心有一个文本字段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
检查来解决这个问题?
答案 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