Github: https://github.com/saitjr/MasonryDemo

直接上代码:

  1. #import "ViewController4.h"
  2. #import "Masonry.h"
  3.  
  4. @interface ViewController4 ()
  5.  
  6. @property (strong, nonatomic) UITextField *textField;
  7.  
  8. @end
  9.  
  10. @implementation ViewController4
  11.  
  12. - (void)dealloc {
  13.  
  14. [[NSNotificationCenter defaultCenter] removeObserver:self];
  15. }
  16.  
  17. - (void)viewDidLoad {
  18. [super viewDidLoad];
  19. // Do any additional setup after loading the view.
  20.  
  21. _textField = [UITextField new];
  22. _textField.backgroundColor = [UIColor redColor];
  23. [self.view addSubview:_textField];
  24.  
  25. [_textField mas_makeConstraints:^(MASConstraintMaker *make) {
  26. make.left.mas_equalTo(10);
  27. make.centerX.equalTo(self.view);
  28. make.bottom.mas_equalTo(0);
  29. make.height.mas_equalTo(40);
  30. }];
  31.  
  32. // 注册键盘通知
  33. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];
  34. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];
  35. }
  36.  
  37. - (void)keyboardWillChangeFrameNotification:(NSNotification *)notification {
  38.  
  39. // 获取键盘基本信息(动画时长与键盘高度)
  40. NSDictionary *userInfo = [notification userInfo];
  41. CGRect rect = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  42. CGFloat keyboardHeight = CGRectGetHeight(rect);
  43. CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
  44.  
  45. // 修改下边距约束
  46. [_textField mas_updateConstraints:^(MASConstraintMaker *make) {
  47. make.bottom.mas_equalTo(-keyboardHeight);
  48. }];
  49.  
  50. // 更新约束
  51. [UIView animateWithDuration:keyboardDuration animations:^{
  52. [self.view layoutIfNeeded];
  53. }];
  54. }
  55.  
  56. - (void)keyboardWillHideNotification:(NSNotification *)notification {
  57.  
  58. // 获得键盘动画时长
  59. NSDictionary *userInfo = [notification userInfo];
  60. CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
  61.  
  62. // 修改为以前的约束(距下边距0)
  63. [_textField mas_updateConstraints:^(MASConstraintMaker *make) {
  64. make.bottom.mas_equalTo(0);
  65. }];
  66.  
  67. // 更新约束
  68. [UIView animateWithDuration:keyboardDuration animations:^{
  69. [self.view layoutIfNeeded];
  70. }];
  71. }
  72.  
  73. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  74. [super touchesBegan:touches withEvent:event];
  75. [self.view endEditing:YES];
  76. }
  77.  
  78. @end

Masonry 实现输入框随键盘位置改变的更多相关文章

  1. 【转】swift实现ios类似微信输入框跟随键盘弹出的效果

    swift实现ios类似微信输入框跟随键盘弹出的效果 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会 ...

  2. swift实现ios类似微信输入框跟随键盘弹出的效果

    封面(图文无关) 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会跟随键盘一起向下收回,二者完全无缝连 ...

  3. 控制input输入框光标的位置

    一:理解input, textarea元素在标准浏览器下两个属性selectionStart, selectionEnd. selectionStart: 该属性的含义是 选区开始的位置: selec ...

  4. h5 ios输入框与键盘 兼容性优化

    起因 h5的输入框引起键盘导致体验不好,目前就算微信.知乎.百度等产品也没有很好的技术方案实现,尤其底部固定位置的输入框各种方案都用的前提下体验也并没有很好,这个问题也是老大难问题了.目前在准备一套与 ...

  5. 【转】IOS 输入框被键盘遮盖的解决方法

    做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollVi ...

  6. 移动端页面input输入框被键盘遮挡问题

    <body class="layout-fixed"> <!-- fixed定位的头部 --> <header> </header> ...

  7. 表格头部与左侧内容随滚动条位置改变而改变(基于jQuery)

    效果图如下: HTML代码: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta chars ...

  8. 【转】ios输入框被键盘挡住的解决办法

    做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollVi ...

  9. ios上有时候提交按钮点击两次才可以取消输入框软键盘

    ios上有时候提交按钮点击两次才可以取消输入框软键盘,点击第一次软键盘消失,点击第二次输入框页面消失,这样用户体验不好.我的做法是用 touchstart 代替click来处理 反应快,但是有时候会出 ...

随机推荐

  1. IE JS编程需注意的内存释放问题

    1.给DOM对象添加的属性是一个对象的引用.范例:var MyObject = {};document.getElementById('myDiv').myProp = MyObject;解决方法:在 ...

  2. java生成随机序列号

    1.java生成随机序列号 String deleteUuid = UUID.randomUUID().toString(); 引用Jar包 //java-uuid-generator-3.1.3.j ...

  3. CAS 在 Tomcat 中实现单点登录

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统 中,用户只需要登录一次就可以访问所有相互信任的应用系统.CA ...

  4. 函数lock_rec_add_to_queue

    在原来的type_mode基础上,加上LOCK_REC /*********************************************************************// ...

  5. js之json

    关于json不了解的,请点击:http://www.json.org/json-zh.html json对象的属性必须要用双引号,值为字符串类型也只能使用双引号,例:{"name" ...

  6. iOS富文本(三)深入使用Text Kit

    在上一篇中介绍了Text Kit的三种基本组件的关系并且简单的实现了怎么使用这三种基本组件,本片将深入的去使用这三种基本组件. NSTextStorage NSTextStorage是NSMutabl ...

  7. Android利用Http下载文件

    Android利用Http下载文件 一.场景 下载存文本文件和下载如mp3等大容量的文件 界面 二.代码编写 1.AndroidMainfest.xml中配置 主要是解决网络权限和写SDCard的权限 ...

  8. UVa 699 (二叉树) The Falling Leaves

    题意: 按先序方式输入一棵二叉树,节点是带权的,左孩子在父节点的左一个单位,右孩子在父节点的右一个单位,从左到右输出相同水平位置节点之和. 分析: 做了好几道二叉树的题,代码应该也很好理解了.这里ma ...

  9. Java 动态太极图 DynamicTaiChi (整理)

    package demo; import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import jav ...

  10. Windows Azure移动终端云服务管理(公测版)

    概览 云在远方,管理在您手中.在这个移动为先 云为先的世界,服务不再是基于请求才提供,而是主动来到身边方便您的模式了.我们最近将会陆续推出几大移动端利器帮助您随时随地管理您的云服务. 首批利器之中排名 ...