有关ios自动滚动页面以显示被键盘挡住的编辑框的处理
2015-04-25 00:11
579 查看
目前手头上有一个项目,注册流程用到了很多用户信息输入,界面样式固定,时间紧急,就用的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)];
-(void)myTap{
[self.view endEditing:YES];
[_mainScroll scrollsToTop];
}
`
然后以后viewcontroller集成自这个baseScrollviewcontroller,大概意思就是,viewdidload 之后直接放一个scrollview上去,size根据contentview设置,contentview 根据约定,加载xxxxViewControllerScroll.xib 文件放到scrollview上,然后上面加一个手势,点击之后结束编辑,键盘弹下并且滚到顶部。这样就可以完美的解决输入框被挡的问题了,而且有附加效果:键盘弹起来的状态下,主界面可以自由滚动查看输入框上下的内容。
首先,把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上,然后上面加一个手势,点击之后结束编辑,键盘弹下并且滚到顶部。这样就可以完美的解决输入框被挡的问题了,而且有附加效果:键盘弹起来的状态下,主界面可以自由滚动查看输入框上下的内容。
相关文章推荐
- GridView设置自动滚动到列表底部导致第一条数据不显示问题处理
- IOS-45-登录页面相关设置之手机号(只显示数字键盘、只允许输入数字、只允许输11位数)
- IOS 键盘的显示与关闭,以及移动显示(UITextView处理完整版)
- iOS 设置编辑时键盘不挡住编辑框以及收起键盘
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- iOS 页面显示在键盘之上
- 滚动条事件,当页面滚动到距顶部一定高度时某DIV自动隐藏和显示
- 滚动条事件,当页面滚动到距顶部一定高度时某DIV自动隐藏和显示
- ios 开发日记 21 -自动处理键盘事件的第三方库:IQKeyboardManager
- iOS 键盘处理(改变键盘为完成键),UITextField键盘显示隐藏,弹出,回弹
- iOS---自动处理键盘事件的第三方库:IQKeyboardManager
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- IOS开发Swift键盘收起,键盘挡住输入模框的处理
- iOS 如何让UITableView显示时自动滚动到底部(不闪动)
- IOS 键盘的显示与关闭,以及移动显示(UITextView处理完整版)
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案
- 纯JS实现页面滚动至顶部并自动显示或隐藏
- [iOS 第三方库介绍]自动处理键盘事件的第三方库 IQKeyboardManager
- ios 利用通知处理键盘的显示与隐藏