用xib做scrollView的键盘自适应以及自动布局
2016-05-03 14:25
323 查看
首先,拖进来一个scrollView
然后对这个scrollView设置上下左右的约束
接着,拖进来一个UIView
设置这个view的上下左右约束
然后要设置这个view的滚动方向,我是让他垂直滚动,所以选中下面这个,如果垂直水平方向都滚动那么久都不用选了,设置一下view的宽高就行
然后很关键的一步就是,因为你设置的是上下滚动,你就要再设置一下他的高度,他才知道他在什么范围内滚动。
酱紫就大功告成了
下面我们说一下关于键盘的自适应
这个键盘自适应一般都是指监听文本框的输入然后不让键盘遮挡住文本框。所以呢,先要将文本框的代理设置为file‘s owner,遵守UITextFieldDelegate协议,监听键盘弹出和隐藏先注册监听
(void)viewWillAppear:(BOOL)animated {[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:self.view.window];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}
之后别忘了对称的移除监听
(void)viewWillDisappear:(BOOL)animated {[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
}
然后根据键盘的frame设置scrollView的frame
(void)keyboardDidShow:(NSNotification *)notification {if (self.keyboardIsShown) {
return ;
}
NSDictionary *info = [notification userInfo];
NSValue *value = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [self.view convertRect:[value CGRectValue] fromView:nil];
CGRect viewFrame = [self.scrollView frame];
viewFrame.size.height -= keyboardRect.size.height;
self.scrollView.frame = viewFrame;
CGRect textFieldRect = [self.currentTextField frame];
[self.scrollView scrollRectToVisible:textFieldRect animated:YES];
self.keyboardIsShown = YES;
}
-(void)keyboardDidHide:(NSNotification *)notification{
self.keyboardIsShown = NO;
}
然后实现UITextField的代理方法
(void)textFieldDidBeginEditing:(UITextField *)textField {self.currentTextField = textField;
}
(void)textFieldDidEndEditing:(UITextField *)textField {
self.currentTextField = nil;
}
(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}
搞定了
相关文章推荐
- Drawable资源——Transition Drawable
- 51nod 1067 博弈
- AngularJS快速开始
- C#中Collection,List和ArrayList的区别(转)
- 第十一周 阅读程序(5a)
- 单元测试
- [疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)
- iOS所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程
- iOS学习笔记49-Swift(九)访问控制
- 转: Syslog协议介绍
- js解决列表中按钮重复点击重复提交的问题
- mysql(mariadb)定时自动热备份+增量+远程备份脚本
- linux搭建java web环境
- [leetcode] 307. Range Sum Query - Mutable 解题报告
- iOS学习笔记49-Swift(九)访问控制
- 推荐一查看源码的网站
- Learning to Rank 中Listwise关于ListNet算法讲授及实现
- Java之集合类应用总结
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数
- Could not write to output file 'c:\Windows\Microsoft.NET ASP.NET Files\root\xx' -- 'Access is denied