iOS获取键盘高度

demo1
demo2


- (void)addNoticeForKeyboard {
    //监听弹出键盘
    @weakify(self);
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(NSNotification * _Nullable noti) {
        @strongify(self);

        NSDictionary *userInfo = [noti userInfo];
        NSTimeInterval animationDuration;
        UIViewAnimationCurve animationCurve;
        CGRect keyboardBeginFrame;
        CGRect keyboardEndFrame;
        [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
        [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] getValue:&keyboardBeginFrame];
        [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
        [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];

        CGFloat offsetHeight = self.view.height - keyboardEndFrame.origin.y - kTabBarMargin;
        offsetHeight = offsetHeight > 0 ? offsetHeight : 0;
        
        NSLog(@"willShowNotification : %f\n, keyboardBeginFrame = %@\n,keyboardEndFrame = %@", offsetHeight,NSStringFromCGRect(keyboardBeginFrame),NSStringFromCGRect(keyboardEndFrame));
        
        [UIView animateWithDuration:animationDuration animations:^{
            [UIView setAnimationCurve:animationCurve];
            self.textField.y = self.view.height - 40 - kTabBarMargin;
            [self.view layoutIfNeeded];
        }];

    }];

    //可以监听收回键盘
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillHideNotification object:nil] subscribeNext:^(NSNotification * _Nullable noti) {
        @strongify(self);

        NSDictionary *userInfo = [noti userInfo];
        NSTimeInterval animationDuration;
        UIViewAnimationCurve animationCurve;
        [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
        [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
        
        CGFloat y = self.view.bounds.size.height - 40 - kNavigationH - kTabBarMargin;
        NSLog(@"willShowNotification : %f", y);

        [UIView animateWithDuration:animationDuration animations:^{
            [UIView setAnimationCurve:animationCurve];
            self.textField.y = y;
            [self.view layoutIfNeeded];
        }];

    }];
}

你可能感兴趣的:(iOS获取键盘高度)