关于IQKeyBoardManager挤出导航栏的解决方案

写在前面

虽然修改后能解决导航栏被挤出去的问题,但是就目前来看是有副作用的,写这篇文章就是想大家来一起讨论,毕竟键盘处理还是比较头疼的。

如何修改

其实我也就注释了一段代码
文件位置:IQKeyManager>Categorise>IQUIView+Hierarchy.m

关于IQKeyBoardManager挤出导航栏的解决方案_第1张图片
屏幕快照 2016-06-16 上午11.31.59.png

注释了框出来的代码,前面也说了,这样做虽然能解决问题但是是有副作用的

目前已经发现的修改后的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,如果发现了大家一起讨论讨论,菜逼在此感激不尽,(我特么实在不想自己去一个个的处理键盘,原谅我的懒惰与菜)

你可能感兴趣的:(关于IQKeyBoardManager挤出导航栏的解决方案)