美文网首页iOS OC 学习手册iOS 开发
谈谈解决IQKeyboard导致导航栏上移的方法

谈谈解决IQKeyboard导致导航栏上移的方法

作者: 雨田24 | 来源:发表于2016-09-06 10:37 被阅读7871次

    很简单的问题,网上的回答却是乱七八糟的。别再看网上那些复制粘贴的解决方法了,都是坑。复制粘贴回答别人问题,自己时都没试过,懂都不懂的人,都是傻×。

    误区1:用ib创建UI,把控制器的view改成scrollview,会导致子视图上的控件布局完全混乱(我的是textview和button,别的不知道会不会),要重新设置很多东西,并不是把view改成scrollview就能解决的。

    误区2:纯代码创建UI,重写loadView方法,然后把self.view = scrollview。跟ib差不多,布局也会完全混乱,而且手写的想调整更麻烦,还要做contentView的处理什么的一大堆东西。

    其实根本没必要搞这些。搞来搞去还容易出问题。而且还分ib和纯代码的。下面我来告诉大家一个最简单的方法。直接在本控制器禁用IQ然后自己写适配就行了,适配也很简单,只是在textview的代理方法里面做一些view的上移而已,收回键盘再移下来就行了,不管ib还是纯代码都能用。而且如果不想用IQ的,也能用两个代理方法完美解决。

    禁用IQ方法:

    //

    -(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    [IQKeyboardManager sharedManager].shouldResignOnTouchOutside = YES;

    [IQKeyboardManager sharedManager].enable = NO;

    }

    //

    -(void)viewWillDisappear:(BOOL)animated{

    [_textView resignFirstResponder];

    [IQKeyboardManager sharedManager].enable = YES;

    }

    //以下两个代理方法可以防止键盘遮挡textview

    -(void)textViewDidBeginEditing:(UITextView *)textView{

    //这里的offset的大小是控制着呼出键盘的时候view上移多少。比如上移20,就给offset赋值-20,以此类推。也可以根据屏幕高度的不同做一个if判断。

    float offset = 0.0f;

    if(_textView == textView){

    offset = -20;

    }

    NSTimeInterval animationDuration = 0.30f;

    [UIView beginAnimations:@"ResizeForKeyBoard"context:nil];

    [UIView setAnimationDuration:animationDuration];

    float width = self.view.frame.size.width;

    float height = self.view.frame.size.height;

    CGRect rect = CGRectMake(0.0f, offset , width, height);

    self.view.frame = rect;

    [UIView commitAnimations];

    }

    //完成编辑的时候下移回来(只要把offset重新设为0就行了)

    -(void)textViewDidEndEditing:(UITextView *)textView{

    float offset = 0.0f;

    NSTimeInterval animationDuration = 0.30f;

    [UIView beginAnimations:@"ResizeForKeyBoard"context:nil];

    [UIView setAnimationDuration:animationDuration];

    float width = self.view.frame.size.width;

    float height = self.view.frame.size.height;

    CGRect rect = CGRectMake(0.0f, offset , width, height);

    self.view.frame = rect;

    [UIView commitAnimations];

    }

    图就不做了,大家有兴趣的可以去试试,反正就这些代码,完全不用改。本人亲证,完全没问题。很简单有木有。

    相关文章

      网友评论

        本文标题:谈谈解决IQKeyboard导致导航栏上移的方法

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