有关ios自动滚动页面以显示被键盘挡住的编辑框的处理

目前手头上有一个项目,注册流程用到了很多用户信息输入,界面样式固定,时间紧急,就用的xib控件,但是这样问题就来了,控件都是固定位置的,如果键盘弹起来就把正在输入的编辑框挡住了,这样的用户体验是非常不好的,所以寻找各种解决办法,目前的比较完美的解决方案是:IQKeyboardManager + 自定义ScrollViewController

首先,把IQkeyBoardManager 这个第三方的控件放到工程中,编译通过,发现我们的界面已经可以随编辑框滚动了!但是貌似NavigationBar 一起滚动了,而且,有的时候statusBar跟navigationbar上的title 重叠了,这样的效果肯定不是我们想要的,所以去GitHub上看官版教程,叫我们把xib 的主view 改为scrollview ,就可以解决navigationbar 一起滚动的问题,ok,改完之后会发现,全乱套了,因为你的scrollview 的约束已经失效,scrollview是主view,这样的话,上面的view是依赖于scrollview的,但是scrollview 又依赖于子view,所以会有冲突。重新autolayout?太费事了。。

解决办法,真的就是加一个scrollview 到主view上去,就相当于在view上再放一层scrollview,把所有的控件放到scrollview上,这样做的话,貌似代码量增加很多,我是这样解决的,
1. 首先将xib与controller 解除自动加载xib关系,将xib中的view跟fileOwner的连线叉掉,将xib文件名后面加一个Scroll : xxxxViewControllerScroll.xib 避免 controller 自动加载xib
2. 创建BaseScrollviewController 继承于viewController,在viewDidLoad里面添加如下代码

` _mainScroll =[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH,SCREEN_HEIGHT)];

[_mainScroll setDelaysContentTouches:NO];

_contentView =[[[NSBundle mainBundle]loadNibNamed:[NSString stringWithFormat:@"%@%@",NSStringFromClass([self class]),@"Scroll"] owner:self options:nil] firstObject];
_mainScroll.contentSize = CGSizeMake(SCREEN_WIDTH, SCREEN_HEIGHT);
_contentView.frame      = CGRectMake(0, 0, SCREEN_WIDTH, _contentView.frame.size.height);
[_mainScroll addSubview:_contentView];
[self.view addSubview:_mainScroll];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(myTap)];
[_contentView addGestureRecognizer:tap];

-(void)myTap{
[self.view endEditing:YES];
[_mainScroll scrollsToTop];
}
`
然后以后viewcontroller集成自这个baseScrollviewcontroller,大概意思就是,viewdidload 之后直接放一个scrollview上去,size根据contentview设置,contentview 根据约定,加载xxxxViewControllerScroll.xib 文件放到scrollview上,然后上面加一个手势,点击之后结束编辑,键盘弹下并且滚到顶部。这样就可以完美的解决输入框被挡的问题了,而且有附加效果:键盘弹起来的状态下,主界面可以自由滚动查看输入框上下的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值