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

作者: 夜乡晨庭 | 来源:发表于2016-06-16 12:11 被阅读5891次

    写在前面

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

    如何修改

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

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

    相关文章

      网友评论

      • 风火游龙:为了赞你这个简书,我从遥远而偏僻的地方,骑着破烂的摩托车,顶着炙热的太阳,忙的只穿了条内裤,在忐忑的乡村马路上冒着很重的灰尘来到城里的网吧!网吧只有两台电脑,排队等了5个小时!终于赞上了!
      • 小伙丶别跑:可以试试设置一下contentSize
      • ec26f8efef62:你们都会这样嘛?都错了。人家写的很好,是你们不会用。
        ec26f8efef62:@等今天 把界面所有的東西裝進 scroollview就可以
        等今天:你有什么解决方法?
      • TyroneTang:亲测了一下好像不是IQKeyboard导致的导航栏被隐藏,而是IOS8之后UINavigationController新增的键盘弹出时导航栏自动隐藏的特性导致的。我的解决方案是设置self.navigationController?.hidesBarsWhenKeyboardAppears = true
        self.navigationController?.hidesBarsOnTap = true 这两个属性 具体的可以测一测
        布袋的世界:@攻城狮糖糖 我就是刚用,执行不了,navigationController还是没有掉
        TyroneTang:@布袋的世界 目前已解决我的部分问题,你可以测一测,如果有更好的解决方案也请告知我:smile:
        布袋的世界:这样子有用吗?
      • 紫星轩:其实没这么麻烦的, 我之前也遇到这个问题, 后来一个大神指点出来的, IQKeyBoardManager继承的是UIScrollView, 只需要把使用IQKeyBoardManager的Controller的view继承类改成UIScrollView就可以了
        愚人船ios:@紫星轩 我改成uiscrollview 布局不起作用 全乱套了怎么回事?
        紫星轩:@怀恋ooO 是的, 我使用的xib
        夜乡晨庭:@紫星轩 z这个方法我也试过,只不过这种方法好像在用纯代码自动布局时不好用
      • Wws:[IQkeyBoardxxxx sharedXXXX] 拿到manager enable = NO , 或者Toolxx = NO 我记得在Apper 的disappear里面写就行

      本文标题:关于IQKeyBoardManager挤出导航栏的解决方案

      本文链接:https://www.haomeiwen.com/subject/ssegkttx.html