移动位于键盘下方的内容

我有一个关于苹果文档中的代码移动位于键盘下的内容的问题 。 我已经研究过这个,但是在我开始使用替代解决scheme之前,我正在寻求澄清我在这里模糊的概念。

不幸的是,一旦键盘animation结束键盘向上移动,视图向下移动并完全离开现场。 无论文本字段实际上是否被键盘覆盖,都会发生这种情况。 所以现在我回来试图了解在文档中提供的代码,并尝试更改各种参数后,我一直无法让它正常工作。

苹果提供的相关代码是:

- (void)keyboardWasShown:(NSNotification*)aNotification NSLog(@"keyboardWasShown"); NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); scrollView.contentInset = contentInsets; scrollView.scrollIndicatorInsets = contentInsets; // If active text field is hidden by keyboard, scroll it so it's visible // Your application might not need or want this behavior. CGRect aRect = self.view.frame; aRect.size.height -= kbSize.height; if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) { NSLog(@"if"); CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); NSLog(@"scrollPoint is %@", NSStringFromCGPoint(scrollPoint)); [scrollView setContentOffset:scrollPoint animated:YES]; 

首先,在我改变任何东西之前,如下所示,这是我得到的:

 GO[4614:c07] keyboardWasShown 2012-09-08 22:58:23.892 DRO GO[4614:c07] if 2012-09-08 22:58:23.892 DRO GO[4614:c07] scrollPoint is {0, -281} 

所以,打破它:

  1. NSLog只是我的信息表明方法被调用

  2. NSDictionary – 包含有关键盘的信息,包括其尺寸,这样不同的设备或方向的键盘尺寸将被自动计算。

  3. CGSize – 从字典中获取实际大小

  4. UIEdgeInsets – 在UIKit函数参考中find参考 – 为button或视图创build边缘插入,其中插入是围绕绘图矩形的边,其中每边(左侧,右侧,顶部和底部)可以具有不同的值。 在这种情况下,将底边设置在键盘的高度。 既然我的观点是向下而不是向上,我试图扭转“顶”和“底”的价值观,也许他们倒过来了。 而不是animation顺利滚动的视图,现在它只是在键盘popup时闪烁不见,我得到这个:

    GO [4829:c07] if 2012-09-08 23:06:57.146 DRO GO [4829:c07] scrollPoint是{0,-281}

  5. scrollView.contentInset:内容视图从包含的滚动视图中插入的距离。 使用此属性添加到内容周围的滚动区域。 单位的大小是点。 默认值是UIEdgeInsetsZero看起来像这应该是添加区域滚动视图的底部,让它随着键盘上移。

  6. scrollView.scrollIndicatorInset – 告诉滚动指示器响应键盘按比例移动到视图移动

  7. CGRect – 使用视图尺寸创buildaRect对象。

  8. aRect – CGRect的高度值,由键盘的高度减小。 我在这里超级模糊 – 应该是未被键盘覆盖的视图区域。

  9. 如果 – 如果CGpoint不在(位于键盘下的矩形中,在活动文本字段内的某个点) – 这是没有意义的; 这里的逻辑逃避了我

  10. NSLog – 告诉我,我们得到了这么多

  11. CGScrollPoint – 定义视图应该滚动到的点。 由于查看原点位于左上angular,因此减去键盘高度应使其向上滚动键盘高度的距离,以保持文本字段不变。 只是为了踢,当我试图改变它+ kbSizeHeight我得到视图迅速消失,并且:GO [4682:c07]如果2012-09-08 23:02:48.078 DRO GO [4682:c07] scrollPoint是{0,679 }

  12. NSLog – 告诉我该视图将被移动到什么位置

  13. [scrollView – 告诉scrollView使用animation调整到新的scrollPoing

我不知道苹果是怎么做的,我相信他们build议把内容放到滚动视图中,然后当你点击文本框时,你告诉滚动视图向上滚动,这样你就可以看到你正在input的内容。

我是一个懒惰的人,所以我所做的只是告诉视图本身,当用户点击一个字段,将被键盘隐藏的位置。

我通常这样做:

 // shift view up self.view.transform = CGAffineTransformMakeTranslation(0, -someYOffsetValue); // shift view back down to original value self.view.transform = CGAffineTransformMakeTranslation(0, 0); 

您可以将其包装在UIView animateWithDuration:块中以实现平滑过渡。