我意识到有许多类似的解决方案,例如TPKeyboardAvoiding,Apple 著名的解决方案,以及涉及使用 UIScrollView 的各种建议。就我而言,我需要调整视图的大小以适应键盘,而不是滚动或移动它。这个解决方案最接近我想要实现的目标,所以这是我的基础。但是,我在使事情在横向模式下工作时遇到问题。我在键盘出现时调整视图大小的方法是:
- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
CGRect keyboardFrame = [[self textField].superview convertRect:[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:nil];
CGRect statusBarFrame = [[self textField].superview convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];
CGRect bounds = [self textField].superview.bounds;
CGRect newFrame = CGRectMake(0.0, 0.0, bounds.size.width, keyboardFrame.origin.y + statusBarFrame.size.height);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
[self textField].superview.frame = newFrame;
} completion:nil];
}
这在纵向模式下完美运行。
但是,在横向模式下,视图从左到右或从右到左调整大小取决于设备旋转的方向,而不是从下向上。
显然,我使用坐标的方式有问题,并且在横向模式下,某些参考框架并不是我认为的那样,但我有一段时间在整理如何解决它。我已经尝试使用 -convertRect: 转换各种东西:但我没有尝试让我到任何地方。
我真的希望那些对所有这些矩形以及它们在方向变化时如何变化不那么困惑的人能够发现我做错了什么以及我需要做些什么才能做到这一点。作为参考,我创建了一个项目,展示了重现我遇到的问题的最简单案例。