iOS之键盘弹出视图上移

有时候搞开发会碰到一个问题,就是当点击一个UITextField时,弹出虚拟键盘会将这个文本控件遮住。这无论从开发角度还是用户体验来说,都是不行的。

其实要解决这个问题也是很简单的,只要获取键盘没弹出前键盘的Rect,键盘弹出后键盘的Rect,其实最主要的变化还是在于Y值嘛,所以只要两者相减就

能得到需要移动的距离,然后做个动画就OK了。

那具体代码如下:


  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8.   
  9. - (void)viewDidLoad  
  10. {  
  11.     [super viewDidLoad];  
  12.       
  13.     //注册观察键盘的变化  
  14.     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(transformView:) name:UIKeyboardWillChangeFrameNotification object:nil];  
  15.       
  16. }  
  17. //键盘回收  
  18. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event  
  19. {  
  20.     for(UIView *view in self.view.subviews)  
  21.     {  
  22.         [view resignFirstResponder];  
  23.     }  
  24. }  
  25.   
  26. //移动UIView  
  27. -(void)transformView:(NSNotification *)aNSNotification  
  28. {  
  29.     //获取键盘弹出前的Rect  
  30.     NSValue *keyBoardBeginBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameBeginUserInfoKey];  
  31.     CGRect beginRect=[keyBoardBeginBounds CGRectValue];  
  32.       
  33.     //获取键盘弹出后的Rect  
  34.     NSValue *keyBoardEndBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey];  
  35.     CGRect  endRect=[keyBoardEndBounds CGRectValue];  
  36.       
  37.     //获取键盘位置变化前后纵坐标Y的变化值  
  38.     CGFloat deltaY=endRect.origin.y-beginRect.origin.y;  
  39.     NSLog(@"看看这个变化的Y值:%f",deltaY);  
  40.       
  41.     //在0.25s内完成self.view的Frame的变化,等于是给self.view添加一个向上移动deltaY的动画  
  42.     [UIView animateWithDuration:0.25f animations:^{  
  43.         [self.view setFrame:CGRectMake(self.view.frame.origin.xself.view.frame.origin.y+deltaY, self.view.frame.size.widthself.view.frame.size.height)];  
  44.     }];  
  45. }  
  46. @end  


转载自:http://blog.csdn.net/qq_27325349/article/details/51035877


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值