当键盘出现并启用滚动时,TextField 向上移动
Posted
技术标签:
【中文标题】当键盘出现并启用滚动时,TextField 向上移动【英文标题】:TextField moves up when keyboard appears and scrolling enabled 【发布时间】:2015-08-17 10:30:36 【问题描述】:我正在使用带有滚动视图的文本字段。每当出现键盘时,就会启用滚动并且文本字段会向上移动。但是有一个问题,如果我滚动我的文本字段,然后单击另一个文本字段,它不会向上移动。
请提出建议。
【问题讨论】:
贴一些代码。你是怎么做的。 试试 TPKeyboardAvoidingScrollView... 这将处理所有事情。 :) 【参考方案1】:如果您使用的是 scrollView ,这将是最适合您的。使用TPKeyboardAvoiding。它非常易于使用。
将TPKeyboardAvoidingScrollView.m
和TPKeyboardAvoidingScrollView.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 中打开键盘时,如何向上推送内容?