我在屏幕底部有一个自定义视图,我想在键盘打开时将其重新定位在键盘上方。
我知道我可以注册"键盘被显示"通知,然后重新定位视图,或者按照苹果文档建议使用带有scrollRectToVisible的滚动视图,但我对这两个选项的问题是它不是作为键盘动画的一部分完成的。我可以看到键盘出现,仅一秒钟后视图被重新定位或滚动到视图中。
我尝试的另一个选项是将此视图设置为文本视图im编辑的InputAccessory,这效果很好,但是一旦键盘关闭,我的视图将不可见,我需要它始终可用。
我想我可以创建此视图的两个实例,其中一个作为inputAccessory,另一个位于底部,但我真的不喜欢这个解决方案,并且这些视图的状态必须在两个实例之间同步
任何人都可以提出替代解决方案吗?
你最好使用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];
}
视图和键盘的动画将同步。