写在前面
虽然修改后能解决导航栏被挤出去的问题,但是就目前来看是有副作用的,写这篇文章就是想大家来一起讨论,毕竟键盘处理还是比较头疼的。
如何修改
其实我也就注释了一段代码
文件位置:IQKeyManager>Categorise>IQUIView+Hierarchy.m
注释了框出来的代码,前面也说了,这样做虽然能解决问题但是是有副作用的
目前已经发现的修改后的bug
1.当push后立马给输入框获取焦点的时候,收起键盘后,self.view会向上偏移64个单位,也就是导航栏的高度。
原理是如果不注释这段代码,那么该方法返回的是导航栏控制器,IQKeyBoard会将导航栏控制器的view一起偏移,注释掉后返回的就是viewController而不是NavigationViewController。
Eg:
-(void)viewDidLoad{
[super viewDidLoad];
self.title = @"键盘处理";
_inputTV = [[UITextView alloc] init];
[self.view addSubview:_inputTV];
[_inputTV mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.view);
make.top.equalTo(self.view).offset(20);
make.height.equalTo(@40);
}];
// 如果在view初始化玩后就让其成为第一响应,在键盘收起时,self.view就会向上偏移
[_inputTV becomeFirstResponder];
}
尝试
我只是猜想,因为IQKeyBoard是通过注册各种通知,TextView 、UITextField 还有键盘的通知,是不是在viewdidload里 becomeFirstResponder时,通知发送顺序的影响加上我注释了那段代码(因为不注释是没有问题的)。
所以,我改在viewDidAppear里 becomeFirstResponder,解决问题,当然,这不是最好的解决方案。
写在最后
大神写的IQKeyBoardManager确实好用,但是还是有一点点瑕疵,如果有小伙伴采用了我的方法,可能会有其他的bug,如果发现了大家一起讨论讨论,菜逼在此感激不尽,(我特么实在不想自己去一个个的处理键盘,原谅我的懒惰与菜)