键盘弹起收起时不遮挡处理

view初始化时增加通知:

{code}

   //增加监听,当键盘出现或改变时收出消息

        [[NSNotificationCenter defaultCenter] addObserver:self

                                                 selector:@selector(keyboardWillShow:)

                                                     name:UIKeyboardWillShowNotification

                                                   object:nil];

        

        //增加监听,当键退出时收出消息

        [[NSNotificationCenter defaultCenter] addObserver:self

                                                 selector:@selector(keyboardWillHide:)

                                                     name:UIKeyboardWillHideNotification

                                                   object:nil];

{code}

键盘弹起和收起时触发的动作

{code}

- (void)keyboardWillShow:(NSNotification *)notification {

    if (!_highlightedTextField) {// 当前焦点TextField

        return;

    }

    

    UIView *view = [self superview];

    while (![view isKindOfClass:[UIScrollView class]] &&

           [view superview]) {

        view = [view superview];

    }

    if (![view isKindOfClass:[UIScrollView class]]) {

        return;

    }

    

    UIScrollView *scrollView = (UIScrollView *)view;

    

    CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    CGFloat keyboardHeight = kbSize.height;

    

    UITextField *textField = _highlightedTextField;

    

    if ([UIApplication sharedApplication].windows.count == 0) {

        return;

    }

    

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);

    scrollView.contentInset = contentInsets;

    scrollView.scrollIndicatorInsets = contentInsets;

    

    UIWindow *window = [UIApplication sharedApplication].windows[0];

    CGRect textRect = [scrollView convertRect:textField.bounds fromView:textField];

    CGRect scrollRect = [window convertRect:scrollView.bounds fromView:scrollView];

    

    CGFloat scrollBottomMargin = window.height - scrollRect.origin.y - scrollRect.size.height;

    

    CGFloat offset = textRect.origin.y + textRect.size.height - scrollView.contentOffset.y - scrollBottomMargin - (scrollView.height - keyboardHeight);

    

    if (offset > 0) {

        CGPoint scrollPoint = CGPointMake(0.0, scrollView.contentOffset.y + offset);

        [scrollView setContentOffset:scrollPoint animated:YES];

    }

}

 

- (void)keyboardWillHide:(NSNotification *)notification{

    UIView *view = [self superview];

    

    while (![view isKindOfClass:[UIScrollView class]] &&

           [view superview]) {

        view = [view superview];

    }

    if (![view isKindOfClass:[UIScrollView class]]) {

        return;

    }

    

    UIScrollView *scrollView = (UIScrollView *)view;

    

    UIEdgeInsets contentInsets = UIEdgeInsetsZero;

    scrollView.contentInset = contentInsets;

    scrollView.scrollIndicatorInsets = contentInsets;

}

{code}

原文地址:https://www.cnblogs.com/ranger-jlu/p/4829692.html