位于键盘下方移动内容(Moving content located under the keyboa

2019-09-22 06:32发布

我有一个关于在苹果的文档中发现的代码问题位于键盘下方移动内容 。 我研究这个,但是我正在寻找澄清我模糊就到这里之前,我开始变得花哨替代解决方案的概念。

不幸的是,只要键盘动画完成移动键盘时,该视图向下移动,并且完全脱离现场。 这发生在文本字段是否实际上是被覆盖的键盘或不是一个。 所以,现在我回来试图了解文档中提供的代码,并尝试改变各种参数,我一直无法得到它正常工作后。

由苹果公司提供的相关代码:

 - (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中函数参考参考 - 用于按钮创建一个边缘插入或查看,其中一个插图是围绕绘制矩形,其中每个侧(左,右,顶部和底部)的余量可具有不同的值。 在这种情况下,设置在键盘的高度,底部边缘。 由于我的看法是向下移动,而不是向上,我试图扭转“顶”和“底”的价值观,思考也许他们正在反转。 相反的观点滚动动画顺利下来,现在它只是闪烁的视线时,键盘弹出,我得到这个:

    GO [4829:C07]如果2012年9月8日23:06:57.146 DRO GO [4829:C07] scrollPoint是{0,-281}

  5. scrollView.contentInset:所述内容视图是从将封闭滚动视图的插入图示的距离。 使用此属性添加到周围的内容的滚动区域。 大小的单位为分。 默认值为isUIEdgeInsetsZero好像这应该是增加区域滚动视图的底部,以允许它与键盘一起动起来。

  6. scrollView.scrollIndicatorInset - 告诉滚动指示响应成比例地移动到视图移动到键盘

  7. 的CGRect - 创建与所述视图的尺寸的aRect对象。

  8. aRect - 所述的CGRect的高度值,由键盘的高度降低。 我超级模糊这里 - 应该是不包括在键盘的视图的区域。

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

  10. NSLog的 - 告诉我,我们走到这一步

  11. CGScrollPoint - 定义视图应该滚动的地步。 由于视图原点是左上角,减去键盘的高度应该有它的滚动的键盘高度的距离,保持文本字段在视图中。 只是踢,当我试图将其更改为+ kbSizeHeight我的看法迅速消失,:GO [4682:C07]如果2012年9月8日23:02:48.078 DRO GO [4682:C07] scrollPoint是{0,679 }

  12. NSLog的 - 告诉我什么滚动点的观点是被移动到

  13. [滚动视图 - 告诉了滚动调整到新的scrollPoing使用动画

Answer 1:

我不知道苹果是怎么做的,我相信他们建议把内容转换成一个滚动视图,然后当你点击文本字段,你告诉了滚动向上滚动,所以你可以看到你正在输入的内容。

我有点懒的人,所以我要做的就是告诉视图本身当用户点击,将通过键盘被隐藏的字段上移。

我通常这样做有:

// shift view up
self.view.transform = CGAffineTransformMakeTranslation(0, -someYOffsetValue);

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

为平稳过渡块:您可以在一个UIView animateWithDuration这个包起来。



文章来源: Moving content located under the keyboard