zoukankan      html  css  js  c++  java
  • Masonry 实现输入框随键盘位置改变

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

    直接上代码:

    #import "ViewController4.h"
    #import "Masonry.h"
    
    @interface ViewController4 ()
    
    @property (strong, nonatomic) UITextField *textField;
    
    @end
    
    @implementation ViewController4
    
    - (void)dealloc {
        
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        _textField = [UITextField new];
        _textField.backgroundColor = [UIColor redColor];
        [self.view addSubview:_textField];
        
        [_textField mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.mas_equalTo(10);
            make.centerX.equalTo(self.view);
            make.bottom.mas_equalTo(0);
            make.height.mas_equalTo(40);
        }];
        
        // 注册键盘通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];
    }
    
    - (void)keyboardWillChangeFrameNotification:(NSNotification *)notification {
        
        // 获取键盘基本信息(动画时长与键盘高度)
        NSDictionary *userInfo = [notification userInfo];
        CGRect rect = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGFloat keyboardHeight = CGRectGetHeight(rect);
        CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        
        // 修改下边距约束
        [_textField mas_updateConstraints:^(MASConstraintMaker *make) {
            make.bottom.mas_equalTo(-keyboardHeight);
        }];
        
        // 更新约束
        [UIView animateWithDuration:keyboardDuration animations:^{
            [self.view layoutIfNeeded];
        }];
    }
    
    - (void)keyboardWillHideNotification:(NSNotification *)notification {
        
        // 获得键盘动画时长
        NSDictionary *userInfo = [notification userInfo];
        CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
        
        // 修改为以前的约束(距下边距0)
        [_textField mas_updateConstraints:^(MASConstraintMaker *make) {
            make.bottom.mas_equalTo(0);
        }];
        
        // 更新约束
        [UIView animateWithDuration:keyboardDuration animations:^{
            [self.view layoutIfNeeded];
        }];
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [super touchesBegan:touches withEvent:event];
        [self.view endEditing:YES];
    }
    
    @end
    
  • 相关阅读:
    读jQuery之十六(事件代理)
    双向列表(JS)
    单向链表(JS)
    子程序(过程、函数、方法)
    jQuery(1.6.3) 中css方法对浮动的实现缺陷
    操作class属性的新APIclassList
    ajax后退解决方案(四)
    设置元素浮动的几种方式
    各浏览器中使用getAttribute获取checkbox/radio的checked值不同
    IE6/7不支持hashchange事件
  • 原文地址:https://www.cnblogs.com/levy/p/5368073.html
Copyright © 2011-2022 走看看