完美适应iOS中的键盘高度变化

很久以前写了一篇文章,讨论如何《自适应iPhone的不同键盘高度》,今天觉得可以完美跟随:

[cpp]  view plain copy
  1. #pragma mark - reg & unreg notification  
  2.   
  3. - (void)regNotification  
  4. {  
  5.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];  
  6. }  
  7.   
  8. - (void)unregNotification  
  9. {  
  10.     [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];  
  11. }  
  12.   
  13. #pragma mark - notification handler  
  14.   
  15. - (void)keyboardWillChangeFrame:(NSNotification *)notification  
  16. {  
  17.     NSDictionary *info = [notification userInfo];  
  18.     CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];  
  19.     CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];  
  20.     CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];  
  21.       
  22.     CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;  
  23.       
  24.     CGRect inputFieldRect = self.inputTextField.frame;  
  25.     CGRect moreBtnRect = self.moreInputTypeBtn.frame;  
  26.       
  27.     inputFieldRect.origin.y += yOffset;  
  28.     moreBtnRect.origin.y += yOffset;  
  29.       
  30.     [UIView animateWithDuration:duration animations:^{  
  31.         self.inputTextField.frame = inputFieldRect;  
  32.         self.moreInputTypeBtn.frame = moreBtnRect;  
  33.     }];  
  34. }  

通过获取键盘消息的开始状态、结束状态,以及变化周期,可以计算出具体的Y偏移,从而在相同时间里做相同偏移量。

记住在使用

  [self.navigationController popViewControllerAnimated:YES];之前一定要设置

self.contentTextField.text=@""; 否则下次偏移有可能出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值