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


    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}

  • 相关阅读:
    Windows下python3安装pip管理包(转贴)
    AnyConnect removes "Connections" tab from IE Settings solution
    split陷阱
    java不足前面补0
    linux定时任务cron配置说明
    maven常用的plugin
    linux部署两个tomcat
    spring定时任务配置,以及不执行的解决办法
    windows10 自带笔记本键盘禁止和开启
    spring task的定时任务突然断了
  • 原文地址:https://www.cnblogs.com/ranger-jlu/p/4829692.html
Copyright © 2020-2023  润新知