使用键盘时使用 UIScrollView 滑动并向上移动视图

Posted

技术标签:

【中文标题】使用键盘时使用 UIScrollView 滑动并向上移动视图【英文标题】:swiping with UIScrollView and moving up the view when using keyboard 【发布时间】:2013-03-08 09:32:15 【问题描述】:

我正在使用this 示例项目,我想做的是,当您将UITextField 放在视图上时,当UITextField 在键盘下方时,视图会向上移动一点。

我使用了来自this 项目的TPKeyBoardAvoidingScrollView 类。但是,当我单击UITextField 时,视图向上移动,一切都很好,但是当我单击背景时,它不仅恢复正常的屏幕尺寸并关闭键盘,而是返回到第一个视图而不是停留在查看我们当时所处的位置。

还可以在弹出键盘时左右滚动,知道我该如何解决这个问题吗? Here 是我的项目,我把它们都加在一起了。

【问题讨论】:

【参考方案1】:

在 TPKeyboardAvoidingScrollView.m 中有一个方法(keyboardWillHide:),当键盘要隐藏时会调用它。在该方法中,滚动视图的内容偏移设置为 CGPointZero,因此您的滚动视图将到达第一个视图控制器。

- (void)keyboardWillHide:(NSNotification*)notification 
    _keyboardRect = CGRectZero;
    _keyboardVisible = NO;

    // Restore dimensions to prior size
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
    [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]];
    self.contentInset = _priorInset;
    //self.contentOffset = CGPointZero;//Replacing this with below line
    self.contentOffset = CGPointMake(self.contentOffset.x, 0);
    [self setScrollIndicatorInsets:self.contentInset];
    _priorInsetSaved = NO;
    [UIView commitAnimations];

在编辑文本字段时停止滚动-

- (void)keyboardDidShow:(NSNotification*)notification 
    [self setScrollEnabled:NO];
    //existing code


- (void)keyboardWillHide:(NSNotification*)notification 
    [self setScrollEnabled:YES];
    //existing code with modification of content offset

请记住,这可能会影响您使用 TPKeyboardAvoidingScrollView 对象的其他视图。

【讨论】:

谢谢,当键盘弹出时我怎么能阻止他们左右滑动?

以上是关于使用键盘时使用 UIScrollView 滑动并向上移动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 UIScrollView 何时变为可滚动?

键盘出现时 UIScrollView “滞后”

如何使用滑动手势作为触发器移动 UIScrollView

UIScrollView与分页的联合使用

仅在滚动内容到达边缘时识别 UIScrollView 中的滑动手势

UIScrollView 在键盘关闭时停止滚动