前提
作为一个接盘侠,避免不了遇见各种坑。
虽然我入职的时候做这个项目的小伙伴还在,当时他遇见这个问题的时候也问过我怎么解决,但当时没认真看他的实现方式就一直没能把问题解决,所以一个不怎么紧要的问题就遗留在这里.
问题
问题: 在 UITableViewCell 中放入输入框造成的键盘弹起问题.
1.首先,这里我们并没有对键盘做任何处理,但是无论键盘有没有遮到输入框, tableView都会向上弹起,然后回落.给用户一种跳跃感,很糟糕.如果这样也就罢了.
2.但是当一个输入框处于编辑状态,我们点击下一个输入框时(这里上次的回落并不是刚好落在键盘上,输入框与键盘会有或大或小的空间), tableView 还是会往上弹起,咯,然后就不下来了......
3.然后我尝试给其添加了一个键盘处理(用的第三方库IQKeyboardManager).这样一编辑输入框,输入框就直接弹不见了(无论输入框会不会被遮挡)
解决问题契机
昨晚这个模块有个新需求.....讨厌改需求.
然后测试时候我点击输入框,它弹来弹去我特么窝火
所以就着手改...
重点
我特么发现它控制器继承的是 UITableViewController 而不是 UIViewController(抱歉,这个项目竟然没有 baseViewController...所有的共性需求在每个控制器里面处理呵呵呵呵)
问题原因
ViewController如果继承于UITableViewController,那么系统会自动处理键盘遮挡的问题
因为我个人没直接用过UITableViewController(我都是在 controller 上面添加 tableView...毕竟快捷键代码块就出来了)
结合我们没做任何处理就会出现键盘弹起,我大概锁定了问题应该就出现在这里了.
解决
我接手项目后发现了很多键盘遮挡的问题都没有优化,我就直接添加了IQKeyboardManager分别对出现问题的地方做了处理(这里我没有全局开启IQKeyboard,只在需要处理的 controller 中开启,全局开启没准哪天就会出现莫名其妙的问题,还特么找不到!别问我为什么知道,我之前一个项目被这个问题坑了两周)
基于上面所做的工作,我直接把出现问题的 controller 改为继承 UIViewConroller,并添加了 TableView.
之后问题就迎刃而解.
补充
IQKeyboardManager是 OC 的库,但由于目前 swift 中我还没找到更好的替代库(IQKeyboard有个 swift 的分支可以供 swift 项目使用,但是我使用时发现有时候项目会莫名其妙的崩溃,断点处理发现是IQKeyboard的问题,让我很闹心.由于IQKeyboard本身代码逻辑很难理解(可以参考 github 中库作者给的关系图....反正我是没看懂),所以我果断把项目换成了 oc 版的了)
PS: 主要是太菜,还不能自己写库><
网友评论