iOS第三方键盘高度获取方法

ios8允许第三方键盘使用后,键盘的高度经常不准确,怎么破,不废话,上代码。

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,strong) UITextField *textField;

@end

@implementation ViewController

#pragma mark - lifeCycle

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self.view addSubview:self.textField];
    [self adjustFrame];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeTextFieldFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

}

- (void)adjustFrame
{
    _textField.frame = CGRectMake(0, CGRectGetHeight(self.view.bounds) - 40, CGRectGetWidth(self.view.bounds), 40);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - privateMethod

- (void)changeTextFieldFrame:(NSNotification *)noti
{
    NSDictionary *userInfo = noti.userInfo;

    [UIView animateWithDuration:[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
        NSDictionary* d = [noti userInfo];

#pragma mark - 获取键盘frame

        CGRect r = [d[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGRect frame = self.textField.frame;
        frame.origin.y = CGRectGetMinY(r) - CGRectGetHeight(frame);
        self.textField.frame = frame;
    }];

}


#pragma mark - 触屏事件

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.textField resignFirstResponder];
}

#pragma mark - get

- (UITextField *)textField
{
    if (_textField == nil) {
        _textField = [[UITextField alloc] init];
        _textField.backgroundColor = [UIColor lightGrayColor];
    }
    return _textField;
}

@end

该段代码的核心: CGRect r = [d[UIKeyboardFrameEndUserInfoKey] CGRectValue];
用这段话可以比较准确的监听到键盘的高度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值