0
我已经做到这样,当用户点击文本字段时,视图会稍微向上移动,以便字段在用户正在键入时仍然可见。它的效果很好,但有时在键盘被解散后,而不是返回原来的位置,视图滑得太远(在顶部留下一个小的空白黑条)。有谁知道我怎么才能恢复到原来的位置?这是我的代码:动画后返回到原始位置
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_userField.returnKeyType = UIReturnKeyDone;
[_userField setDelegate:self];
_passField.returnKeyType = UIReturnKeyDone;
[_passField setDelegate:self];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
}
- (void)dismissKeyboard
{
[_userField resignFirstResponder];
[_passField resignFirstResponder];
}
-(void)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
}
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[self animateTextField:textField up:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self animateTextField:textField up:NO];
}
-(void)animateTextField:(UITextField*)textField up:(BOOL)up
{
const int movementDistance = -130; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement = (up ? movementDistance : -movementDistance);
[UIView beginAnimations: @"animateTextField" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
什么是触发该方法?你在听键盘通知吗? – Dare
您未使用AutoLayout? (我不知道,只是想知道)。 对帧的完整理解,确保您之前的位置在加载视图后存储(可能会随着动画而改变),并且Quartz 2D可以让您找出奇怪的转换进入的位置。需要查看其他代码以便更改后,存储位置和使用的自动布局。 –
嗨@StephenJ,是的,我使用AutoLayout。我假设因为我的代码将视图向上移动了一段特定的距离,我只需要在键盘解散后将视图向下移动130。任何想法可能是什么样子?请参阅上面的代码编辑。 – Brittany