gpt4 book ai didi

ios - 移动位于键盘下方的内容

转载 作者:行者123 更新时间:2023-12-01 18:27:17 25 4
gpt4 key购买 nike

我对 Apple 文档 Moving content located under the keyboard 中的代码有疑问.我已经对此进行了研究,但是在开始使用替代解决方案之前,我正在寻找对我在这里模糊的概念的澄清。

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

苹果提供的相关代码为:

 - (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}

所以,分解它:
  • NSLog 只是我的信息,表明该方法被称为
  • NSDictionary - 包含有关键盘的信息,包括其尺寸,以便自动考虑不同设备或方向中的不同键盘尺寸。
  • CGSize - 从字典中获取实际大小
  • UIEdgeInsets - 在 UIKit 函数引用中找到引用 - 为按钮或 View 创建边缘插入,其中插入是绘图矩形周围的边距,其中每一边(左、右、顶部和底部)可以具有不同的值。在这种情况下,将底部边缘设置为键盘的高度。由于我的 View 是向下移动而不是向上移动,因此我尝试颠倒“顶部”和“底部”值,认为它们可能是颠倒的。而不是 View 随着动画顺利向下滚动,现在它只是在键盘弹出时闪烁而看不见,我得到了这个:

    去[4829:c07] 如果
    2012-09-08 23:06:57.146 DRO GO[4829:c07] 滚动点为 {0, -281}
  • scrollView.contentInset:内容 View 插入到封闭 ScrollView 的距离。
    使用此属性可添加到内容周围的滚动区域。大小的单位是点。默认值为UIEdgeInsetsZero
    似乎这应该在 ScrollView 的底部添加区域以允许它与键盘一起向上移动。
  • scrollView.scrollIndicatorInset - 告诉滚动指示器与 View 移动成比例地移动以响应键盘
  • CGRect - 创建一个具有 View 尺寸的 aRect 对象。
  • aRect - CGRect 的高度值,减去键盘的高度。我在这里 super 模糊-应该是键盘未覆盖的 View 区域。
  • if - 如果 CGpoint 不是(在位于键盘下方的矩形中,在事件文本字段内的某个点) - 这没有意义;这里的逻辑让我无法理解
  • NSLog - 告诉我我们已经做到了
  • CGScrollPoint - 定义 View 应该滚动到的点。由于 View 原点是左上角,减去键盘高度应该让它向上滚动键盘高度的距离,保持文本字段在 View 中。只是为了好玩,当我尝试将其更改为 +kbSizeHeight 时,我的 View 迅速消失并且: GO[4682:c07] if
    2012-09-08 23:02:48.078 DRO GO[4682:c07] 滚动点为 {0, 679}
  • NSLog - 告诉我 View 要移动到哪个滚动点
  • [scrollView - 使用动画告诉scrollView 适应新的scrollPoing
  • 最佳答案

    我不知道Apple是如何做到的,我相信他们建议将内容放入 ScrollView 中,然后当您点击文本字段时,您告诉 ScrollView 向上滚动以便您可以看到您正在输入的内容。

    我有点懒惰,所以我所做的就是告诉 View 本身在用户点击将被键盘隐藏的字段时向上移动。

    我通常这样做:

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

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

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

    关于ios - 移动位于键盘下方的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345131/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com