很简单的问题,网上的回答却是乱七八糟的。别再看网上那些复制粘贴的解决方法了,都是坑。复制粘贴回答别人问题,自己时都没试过,懂都不懂的人,都是傻×。
误区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];
}
图就不做了,大家有兴趣的可以去试试,反正就这些代码,完全不用改。本人亲证,完全没问题。很简单有木有。