虚拟键盘弹出挡住textfield的分析以及解决办法
2017-03-01 16:36
387 查看
转自http://blog.csdn.net/u011374699/article/details/45894303
原本用的方法是int offset = textfield.frame.origin.y + height - self.view.frame.size.height + 216(键盘高度)来计算y轴移动的偏移量。如果offset大于0,就向上偏移。
这里有个问题:如果textfield所在view外面嵌套了好多层布局,而且使用autoLayout,那么,textfield.frame.origin.y=0,导致offset小于0而没有向上偏移。
以下是经本人测试且有效的办法:
// 开始编辑输入框时,键盘出现,视图的Y坐标向上移动offset个单位,腾出空间显示键盘
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect textFrame = textField.frame;
CGPoint textPoint = [textField convertPoint:CGPointMake(0, textField.frame.size.height) toView:self.view];// 关键的一句,一定要转换
int offset = textPoint.y + textFrame.size.height + 216 - self.view.frame.size.height + 24;// 24是textfield和键盘上方的间距,可以自由设定
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
// 将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示
if (offset > 0) {
self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height);
}
[UIView commitAnimations];
}
// 用户输入时
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
// 输入结束后,将视图恢复到原始状态
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
return YES;
}
原本用的方法是int offset = textfield.frame.origin.y + height - self.view.frame.size.height + 216(键盘高度)来计算y轴移动的偏移量。如果offset大于0,就向上偏移。
这里有个问题:如果textfield所在view外面嵌套了好多层布局,而且使用autoLayout,那么,textfield.frame.origin.y=0,导致offset小于0而没有向上偏移。
以下是经本人测试且有效的办法:
// 开始编辑输入框时,键盘出现,视图的Y坐标向上移动offset个单位,腾出空间显示键盘
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
CGRect textFrame = textField.frame;
CGPoint textPoint = [textField convertPoint:CGPointMake(0, textField.frame.size.height) toView:self.view];// 关键的一句,一定要转换
int offset = textPoint.y + textFrame.size.height + 216 - self.view.frame.size.height + 24;// 24是textfield和键盘上方的间距,可以自由设定
NSTimeInterval animationDuration = 0.30f;
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
// 将视图的Y坐标向上移动offset个单位,以使下面腾出地方用于软键盘的显示
if (offset > 0) {
self.view.frame = CGRectMake(0.0f, -offset, self.view.frame.size.width, self.view.frame.size.height);
}
[UIView commitAnimations];
}
// 用户输入时
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
// 输入结束后,将视图恢复到原始状态
self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
return YES;
}
相关文章推荐
- ios -- 虚拟键盘弹出挡住textfield的分析以及解决办法
- Android虚拟键盘弹出时挡住EditText解决方法
- 白苹果问题解决办法以及原因简单分析
- Android虚拟键盘挡住输入组件的解决办法
- highcharts图表内的tooltip提示框在IE浏览器下出现花屏的问题分析以及解决办法
- Session丢失可能的原因分析以及相应的解决办法
- 【Android】常见异常 —— android.view.WindowLeaked 分析以及解决办法
- EnableEventValidation错误原因分析以及解决办法
- Android 底部弹出提示框的解决办法(使用Activity以及PopupWindow)
- Android 虚拟键盘弹出把底部栏顶上去的解决办法
- [IOS]textField被虚拟键盘挡住解决方法
- 存储卷在系统开机时无法自动挂载的原因分析以及解决办法
- textField被虚拟键盘挡住的3种解决方法
- linux系统中一次用户态进程死循环案例的分析过程以及解决办法
- 老鼠自卑的心结分析以及解决办法
- 弹出Div层被Select或DropDownList挡住 解决办法
- enableEventValidation错误原因分析以及解决办法
- "验证视图MAC失败"错误的个人分析以及解决办法
- Xcode6.1模拟器ios8.1模拟器不能弹出虚拟键盘及虚拟键盘无法切换中文输入的解决办法
- ubuntu对硬盘的“Load/Unload Cycle威胁”分析及官方解决办法,以及网上其它解决方法的评价。