我的屏幕底部有一个自定义视图,我想在打开时将其重新定位在键盘上方。
我知道我可以注册' KeyboardWasShown '通知,然后重新定位视图,或者苹果文档建议使用 scrollview 和 scrollRectToVisible ,但我对这两个选项的问题是它不是作为键盘动画的一部分完成的。 我可以看到键盘出现,只有一秒钟后视图重新定位或滚动查看。
我尝试的另一个选项是将此视图设置为textView im编辑的InputAccessory,这非常有效,但键盘关闭后我的视图将不可见,我需要它始终可用。
我想我可以创建这个视图的两个实例,并且有一个作为inputAccessory,另一个只是坐在底部,但我真的不喜欢这个解决方案,这些视图的状态必须在两个实例之间同步
有人可以建议替代解决方案吗?
答案 0 :(得分: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];
}
视图和键盘的动画将同步。