此代码在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;
}
答案 0 :(得分:1)
问题是您的代码会将TextField的位置调整为固定值200.0
这对iOS7来说可能很棒,但iOS8中的情况发生了变化,原因有两个:
每当使用以下两个通知显示或隐藏键盘时,您需要更改移动TextField位置的方法移动:
在下面的主题中,我将解释可能出现的问题以及如何在键盘打开时正确移动视图:
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约束来定位子视图,则需要避免修改框架并改变约束。如果你在这个领域遇到问题,请发帖,因为它可能会变得棘手。