美文网首页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