我创建了新的Xcode单视图项目 . 在界面构建器中,我添加了一个UIScrollView来覆盖完整视图 . 在这个scrollview上,我添加了一个UITextField . 生成的UI如下所示:
请注意,此时滚动视图不会滚动,因为内容仅采用视图大小而不大于视图大小 .
现在,在编辑时将UITextField置于键盘顶部,我按照Apple在_1541726页面上描述的方式进行操作 . 执行此操作后,它给了我预期的行为,在编辑开始时将文本字段放在键盘上方,如下面的屏幕截图所示:
现在,在调用 [textfield endEditing:YES]
之后,键盘会隐藏自己,但文本字段不会返回其原始位置 . 它返回到原来位置稍微高一点的位置,现在滚动视图变得可滚动,好像它的高度增加了一样:
请注意上面屏幕截图中的滚动条!
我想要帮助在编辑结束后(当键盘隐藏时)恢复视图的原始行为,即textField返回到完全相同的位置并且滚动应该发生,因为它在编辑开始之前没有发生 .
6 回答
https://github.com/simonbs/BSKeyboardControls
我认为Apple here指定的官方方式是保持此功能正常运行的最简单和最佳方式 .
您也可以在不使用键盘通知的情况下执行类似的操作 . 您可能知道我们有
TextField
委托方法,我们可以使用它们来设置scrollView contentOffset并获取相同的行为上面的方法设置
contentOffset
滚动视图的值和textFiled
向上移动,而textField
resignFirstResponder
调用下面的委托方法,您可以在其中设置contentOffset
值注意:您需要使视图中的每个文本字段都将其委托作为
UIViewController
实例 . 您还需要UIViewController
采用UITextFieldDelegate
看看你的代码,在尝试定位滚动视图时,你不需要改变内容插入等 . 您只需要修改内容偏移属性 .
这是修改后的代码:
修改keyboardWasShow如下:
键盘将隐藏方法:
不是最好的代码,但它有一些你可以使用的功能,任何带_的都是全局变量
在编辑过程中将UITextField和UITextView移出键盘:
对于非UITableViewControllers,将
TPKeyboardAvoidingScrollView.m
和TPKeyboardAvoidingScrollView.h
源文件放入项目中,将UIScrollView弹出到视图控制器's xib or storyboard, set the scroll view's类中以TPKeyboardAvoidingScrollView,并将所有控件放在该滚动视图中 . 您也可以在不使用xib的情况下以编程方式创建它 - 只需使用TPKeyboardAvoidingScrollView作为顶级视图 .要与UITableViewController类一起使用,请将TPKeyboardAvoidingTableView.m和TPKeyboardAvoidingTableView.h拖放到项目中,并使您的UITableView成为xib中的TPKeyboardAvoidingTableView . 如果您没有在控制器中使用xib,我知道没有简单的方法可以使其UITableView成为自定义类:阻力最小的路径是为它创建一个xib .
你可以从here获得参考 .
希望这可以帮助 .