好的,这是 Apple 在他们的示例中执行此操作的方式(我不再记得是什么项目名称了):
1.您注册键盘通知(键盘每次显示或隐藏时都会发送通知):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
2.获取键盘的大小(您对高度感兴趣)并在视图中不包含该点时滚动:
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
// If active text field is hidden by keyboard, scroll it so it's visible
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
CGPoint point;
point = CGPointMake(0, activeTextField.frame.origin.y + activeTextField.frame.size.height);
if (!CGRectContainsPoint(aRect, point ))
{
CGPoint scrollPoint = CGPointMake(0.0, activeTextField.frame.origin.y+activeTextField.frame.size.height-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
不要忘记在隐藏键盘时进行反向操作,如果您推送到另一个视图控制器,请移除观察者。此示例与 UIScrollView 上的文本字段一起使用,但我相信您可以轻松适应它。
就个人而言,如果我还管理 Web 端,我更喜欢创建 320 像素宽的网页,设置我的 webView sizeToFit,将其添加到 UIScrollView 顶部并从那里管理滚动。对于 textFields,我只需使用 javascript 获取所选 textField 的容器并获取它的坐标。