iOS之键盘弹出视图上移
2016-10-12 18:37
274 查看
有时候搞开发会碰到一个问题,就是当点击一个UITextField时,弹出虚拟键盘会将这个文本控件遮住。这无论从开发角度还是用户体验来说,都是不行的。
其实要解决这个问题也是很简单的,只要获取键盘没弹出前键盘的Rect,键盘弹出后键盘的Rect,其实最主要的变化还是在于Y值嘛,所以只要两者相减就
能得到需要移动的距离,然后做个动画就OK了。
那具体代码如下:
[objc]
view plain
copy
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//注册观察键盘的变化
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(transformView:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
//键盘回收
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
for(UIView *view in self.view.subviews)
{
[view resignFirstResponder];
}
}
//移动UIView
-(void)transformView:(NSNotification *)aNSNotification
{
//获取键盘弹出前的Rect
NSValue *keyBoardBeginBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect beginRect=[keyBoardBeginBounds CGRectValue];
//获取键盘弹出后的Rect
NSValue *keyBoardEndBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect endRect=[keyBoardEndBounds CGRectValue];
//获取键盘位置变化前后纵坐标Y的变化值
CGFloat deltaY=endRect.origin.y-beginRect.origin.y;
NSLog(@"看看这个变化的Y值:%f",deltaY);
//在0.25s内完成self.view的Frame的变化,等于是给self.view添加一个向上移动deltaY的动画
[UIView animateWithDuration:0.25f animations:^{
[self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+deltaY, self.view.frame.size.width, self.view.frame.size.height)];
}];
}
@end
转载自:http://blog.csdn.net/qq_27325349/article/details/51035877
其实要解决这个问题也是很简单的,只要获取键盘没弹出前键盘的Rect,键盘弹出后键盘的Rect,其实最主要的变化还是在于Y值嘛,所以只要两者相减就
能得到需要移动的距离,然后做个动画就OK了。
那具体代码如下:
[objc]
view plain
copy
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//注册观察键盘的变化
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(transformView:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
//键盘回收
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
for(UIView *view in self.view.subviews)
{
[view resignFirstResponder];
}
}
//移动UIView
-(void)transformView:(NSNotification *)aNSNotification
{
//获取键盘弹出前的Rect
NSValue *keyBoardBeginBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect beginRect=[keyBoardBeginBounds CGRectValue];
//获取键盘弹出后的Rect
NSValue *keyBoardEndBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect endRect=[keyBoardEndBounds CGRectValue];
//获取键盘位置变化前后纵坐标Y的变化值
CGFloat deltaY=endRect.origin.y-beginRect.origin.y;
NSLog(@"看看这个变化的Y值:%f",deltaY);
//在0.25s内完成self.view的Frame的变化,等于是给self.view添加一个向上移动deltaY的动画
[UIView animateWithDuration:0.25f animations:^{
[self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+deltaY, self.view.frame.size.width, self.view.frame.size.height)];
}];
}
@end
转载自:http://blog.csdn.net/qq_27325349/article/details/51035877
相关文章推荐
- iOS之键盘弹出视图上移
- ios---实现随着键盘弹出,响应的视图也随之上移
- IOS 实现键盘弹出视图上移功能
- iOS中,textField弹出键盘时,让整个视图上移,键盘回收,视图收回
- iOS 键盘弹出视图上移
- IOS 实现键盘弹出视图上移功能
- XZ_iOS中textField的键盘弹出和回收导致的界面上移和下移
- iOS学习笔记——视图上移与键盘弹回
- iOS键盘弹出的时候会挡住底部的控件,可以通过以下方法将整个UIView上移。
- iOS学习笔记——视图上移与键盘弹回
- iOS输入视图(如UITextView UITextField)点击时没有弹出键盘输入窗
- iOS 键盘弹出与回收、界面上移和下移
- iOS键盘弹出 视图向上滚动键盘高度
- iOS学习笔记——视图上移与键盘弹回
- 视图随键盘的弹出整体上移UIKeyboardWillChangeFrameNotification
- IOS UITableView中UITextField 弹出键盘时,界面上移
- IOS 键盘遮挡输入框 视图上移解决方案
- ios 键盘弹出 视图向上滚动键盘高度
- ios 当键盘出现遮挡视图 视图上移Bug
- iOS键盘高度,键盘弹出视图上移动