TextField动画破了ios8

时间:2014-09-25 18:10:04

标签: ios xcode uitextfield uiviewanimation

此代码在ios 7中运行良好。但是,对于ios8和xcode 6.0.1,它已停止工作。当用户单击文本字段以输入文本时,该字段将动画浮动到键盘顶部正上方,以便他们可以看到他们正在键入的内容。关于为什么现在不能工作的任何想法。我可以看到它开始动画片刻,然后文本字段消失。令人沮丧。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.4];
[UIView setAnimationBeginsFromCurrentState:YES];
textField.frame = CGRectMake(textField.frame.origin.x, (textField.frame.origin.y - 200.0),            
textField.frame.size.width, textField.frame.size.height);

_searchBtn.frame = CGRectMake(_searchBtn.frame.origin.x, (_searchBtn.frame.origin.y - 200.0), 
_searchBtn.frame.size.width, _searchBtn.frame.size.height);
[UIView commitAnimations];


textField.alpha = .75;


}

1 个答案:

答案 0 :(得分:1)

问题是您的代码会将TextField的位置调整为固定值200.0

这对iOS7来说可能很棒,但iOS8中的情况发生了变化,原因有两个:

  • 系统键盘有一个附加视图,用于在键入时显示预测的单词
  • 自定义键盘可以与开发人员选择的一样高

每当使用以下两个通知显示或隐藏键盘时,您需要更改移动TextField位置的方法移动:

  • UIKeyboardWillShowNotification
  • UIKeyboardWillHideNotification

在下面的主题中,我将解释可能出现的问题以及如何在键盘打开时正确移动视图:

can't get correct value of keyboard height in iOS8

编辑1 : 假设文本框有一个名为“yourTextBox”的插座,修改文本框位置的代码可能如下所示:

CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
CGFloat keyboardHeight = <<calculated keyboard height as previously discussed>>;
CGFloat textBoxHeight = _yourTextBox.frame.size.height;

// Change the current frame of your textbox in order to reposition it
CGFrame textBoxFrame = _yourTextBox.frame;
textBoxFrame.origin.y = screenHeight - keyboardHeight - textBoxHeight;
_yourTextBox.frame = textBoxFrame;

注意:如果您使用AutoLayout约束来定位子视图,则需要避免修改框架并改变约束。如果你在这个领域遇到问题,请发帖,因为它可能会变得棘手。