0

我的屏幕底部有一个自定义视图,我想在它打开时将其重新定位在键盘上方。

我知道我可以注册“ KeyboardWasShown ”通知,然后重新定位视图,或者按照苹果文档的建议使用带有scrollRectToVisible的滚动视图,但是我对这两个选项的问题是它不是作为键盘动画的一部分完成的。我可以看到键盘出现,仅一秒钟后视图被重新定位或滚动到视图中。

我尝试的另一个选项是将此视图设置为 TextView 即时编辑的 InputAccessory,这非常有效,但是一旦关闭键盘,我的视图将不可见,我需要它一直可用。

我想我可以创建这个视图的两个实例,一个作为 inputAccessory,另一个只是坐在底部,但我真的不喜欢这个解决方案,这些视图的状态必须在两个实例之间同步

任何人都可以提出替代解决方案吗?

4

1 回答 1

0

你最好使用UIKeyboardWillChangeFrameNotification通知。

首先添加观察者。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

选择器将是...

- (void)keyboardFrameChange:(NSNotification *)notification {
    CGRect begin        = [[notification.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect end          = [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyboardSize= begin.size.height;
    BOOL isShowing      = begin.origin.y > end.origin.y;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
    [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // do view animation here.

    [UIView commitAnimations];
}

您的视图和键盘的动画将同步。

于 2014-12-30T07:36:28.613 回答