iPhone - 出现键盘时如何滚动 UITextField 并调整 UITextView 的大小

Posted

技术标签:

【中文标题】iPhone - 出现键盘时如何滚动 UITextField 并调整 UITextView 的大小【英文标题】:iPhone - How may I scroll a UITextField and resize a UITextView when keybord appears 【发布时间】:2011-01-26 00:24:09 【问题描述】:

我有一个 UIScrollView,里面有一个 UITextField 和一个 UITextView。 我想防止键盘隐藏我们正在处理的字段。 如果我的用户点击 TextField,我希望它滚动到屏幕顶部。 如果我的用户点击 TextView,我希望它调整到键盘顶部左侧的空白位置。 我的键盘有一个附件视图(工具栏)。

现在,我捕捉到 UIKeyboardWillShowNotification 通知,我使用了这段代码,但它并没有真正起作用(文本视图已调整大小,但仍在键盘后面): 当我没有 UIScrollView 时,这段代码运行良好。

- (void)keyboardWillShow:(NSNotification *)notification 

    if ([self.noteView isFirstResponder] == NO) return;

    /*
     Reduce the size of the text view so that it's not obscured by the keyboard.
     Animate the resize so that it's in sync with the appearance of the keyboard.
     */

    NSDictionary *userInfo = [notification userInfo];
    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];                            // Get the origin of the keyboard when it's displayed.
    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];   // Get the duration of the animation.

    // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
    CGRect keyboardRect = [aValue CGRectValue];
    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

    CGFloat keyboardTop = keyboardRect.origin.y;
    CGRect newTextViewFrame = self.view.bounds;
    newTextViewFrame.size.height = keyboardTop - self.view.frame.origin.y; // Using bounds here does not help

    NSTimeInterval animationDuration;
    [animationDurationValue getValue:&animationDuration];

    // Animate the resize of the text view's frame in sync with the keyboard's appearance.
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];

     self.noteView.frame = newTextViewFrame;

    [UIView commitAnimations];

那么你能帮我吗:

为 textview 做这项工作?

让Textview回到原来的位置?

如何在没有任何调整大小功能的情况下滚动 TextField ?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用以下方式以编程方式滚动 uiscrollview:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

不确定这是否适用于您的应用程序。

【讨论】:

那行不通。奇怪的是,应用程序似乎认为键盘后面的东西是可见的......也许是因为keyboardWILLshow

以上是关于iPhone - 出现键盘时如何滚动 UITextField 并调整 UITextView 的大小的主要内容,如果未能解决你的问题,请参考以下文章

tableview 中的两个 TextFields,都在滚动视图上,当键盘出现 iPhone 时消失

如何在 UITextView 中实现滚动功能?

UIScrollView 在键盘关闭时停止滚动

当键盘出现在 iOS 中时启用滚动内容

iPhone:滚动网页视图时需要保持键盘向上吗?

iphone弹出键盘时取消滚动动画