当键盘出现并启用滚动时,TextField 向上移动

Posted

技术标签:

【中文标题】当键盘出现并启用滚动时,TextField 向上移动【英文标题】:TextField moves up when keyboard appears and scrolling enabled 【发布时间】:2015-08-17 10:30:36 【问题描述】:

我正在使用带有滚动视图的文本字段。每当出现键盘时,就会启用滚动并且文本字段会向上移动。但是有一个问题,如果我滚动我的文本字段,然后单击另一个文本字段,它不会向上移动。

请提出建议。

【问题讨论】:

贴一些代码。你是怎么做的。 试试 TPKeyboardAvoidingScrollView... 这将处理所有事情。 :) 【参考方案1】:

如果您使用的是 scrollView ,这将是最适合您的。使用TPKeyboardAvoiding。它非常易于使用。

TPKeyboardAvoidingScrollView.mTPKeyboardAvoidingScrollView.h 源文件拖放到您的项目中,将UIScrollView 弹出到您的视图控制器的xib 中,将滚动视图的类设置为TPKeyboardAvoidingScrollView,然后将所有控件放在该滚动视图中。您也可以通过编程方式创建它,而无需使用 xib - 只需使用 TPKeyboardAvoidingScrollView 作为您的***视图。

【讨论】:

【参考方案2】:

您可以将文本字段坐标系转换为滚动视图坐标系。使用下面的代码

-(void)rearrangeView
    // previous

    if (txtActiveField == txtUsername) 
        CGPoint pt;
        CGRect rc = [txtUsername bounds];
        rc = [txtUsername convertRect:rc toView:scrollViewLogin];
        pt = rc.origin;
        pt.x = 0;
        pt.y -= 40;
        [scrollViewLogin setContentOffset:pt animated:YES];
    
    else if (txtActiveField == txtPassword) 
        // [self.txtEmail becomeFirstResponder];
        CGPoint pt;
        CGRect rc = [txtPassword bounds];
        rc = [txtPassword convertRect:rc toView:scrollViewLogin];
        pt = rc.origin;
        pt.x = 0;
        pt.y -= 40;
        [scrollViewLogin setContentOffset:pt animated:YES];
    


#pragma mark- UITextField Delegate
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField

    txtActiveField = textField;
    //txtActiveField.placeholder = @"";
    [self rearrangeView];

    return YES;

这里的 txtActiveField 是 UItextField 类型的实例变量

【讨论】:

以上是关于当键盘出现并启用滚动时,TextField 向上移动的主要内容,如果未能解决你的问题,请参考以下文章

为啥当其他 textField 变为活动状态时,scrollView 会向下滚动?

键盘出现多次时,滚动视图不会向上移动

当焦点在 TextField 上并且在 Flutter 中打开键盘时,如何向上推送内容?

当键盘出现在 Swift 中时 UITextField 向上移动

在android中打开键盘时设置滚动屏幕向上移动

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