美文网首页
iOS解决键盘出现后TableView高度变化 和 View位置

iOS解决键盘出现后TableView高度变化 和 View位置

作者: 不胜 | 来源:发表于2016-11-08 13:10 被阅读180次

    一、键盘出现TableView的高 动态变化
    有时候,当我们的键盘弹起时候挡住了部分TableView的视图,需要让他的高度发生变化,变的可以滑动到最低部。
    这时候可以通过监听键盘的事件来做出相应的处理。

    // 监听键盘改变
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
    

    我们这里监听的是** UIKeyboardWillChangeFrameNotification**,因为这样就可以在一个监听事件里处理所有事,不然写俩个是很难让强迫症接受的事情。

    #pragma mark 监听键盘事件
    - (void)keyboardWillChangeFrame:(NSNotification *)notification{
    
        NSDictionary *info = [notification userInfo];
        CGFloat duration = [[info objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
        CGRect beginKeyboardRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
        CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
        CGFloat yOffset = endKeyboardRect.origin.y - beginKeyboardRect.origin.y;
       
       [UIView animateWithDuration:duration animations:^{
            
            _tableViewMM.height += yOffset;
        }];
    }
    

    二、键盘出现ToolBarView动态变化
    同样是上面的通知方法,在监听事件里处理transform

    #pragma mark 监听键盘事件
    - (void)keyboardWillChangeFrame:(NSNotification *)notification{
    
        CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
        CGFloat ty = keyboardY - SCREEN_HEIGHT;
        /**
         *  像这种移动后又回到原始位置的建议使用transform,因为transform可以直接清零回到原来的位置
         */
        [UIView animateWithDuration:duration animations:^{
            
            self.toolBarView.transform = CGAffineTransformMakeTranslation(0, ty);
        }];
    }
    

    在最后将监听注销掉

    // 移除监听
    - (void)dealloc{
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    相关文章

      网友评论

          本文标题:iOS解决键盘出现后TableView高度变化 和 View位置

          本文链接:https://www.haomeiwen.com/subject/hqmauttx.html