之前做的项目中有过注册和修改个人信息的页面,因为输入的框比较多,如果要适配较小的屏幕时(比如说,3.5寸屏),不用滚动视图的话没有办法可以将所有输入框都显示在屏幕上。所以把输入框都放到了ScrollView上面(我用xib来拖入控件,而关于ScrollView的适配问题是比较麻烦的,自行百度),这里也会有键盘的遮挡问题。
关于ScrollView的键盘遮挡问题,一开始话了很多时间去改变它的Frame的高度,但是结果不如人意。后来在网上看了很多资料,发现一个简单有效的方法,特此记录下来,供以后查阅。
首先需要注册好键盘通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
接下来是两个注册方法的实现:
//显示键盘
- (void)keyboardWillShow:(NSNotification *)notification {
//获取键盘高度
CGFloat height = [self fetchKeyboardHeightWithNotification:notification];
//设置contentInset的值(一开始的默认值为(0,0,0,0))
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, height, 0);
[self.bgScrollView setContentInset:e];
//这个可以设置ScrollView上键盘的隐藏方式
//_bgScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
}
//隐藏键盘
- (void)keyboardWillHide:(NSNotification *)notification {
//将contentInset的值设回原来的默认值
UIEdgeInsets e = UIEdgeInsetsMake(0, 0, 0, 0);
[self.bgScrollView setContentInset:e];
NSLog(@"scrollView.height = %f", self.bgScrollView.contentSize.height);
}