用xib做scrollView的键盘自适应以及自动布局

首先,拖进来一个scrollView

用xib做scrollView的键盘自适应以及自动布局_第1张图片

然后对这个scrollView设置上下左右的约束

用xib做scrollView的键盘自适应以及自动布局_第2张图片

接着,拖进来一个UIView

用xib做scrollView的键盘自适应以及自动布局_第3张图片

设置这个view的上下左右约束

用xib做scrollView的键盘自适应以及自动布局_第4张图片

然后要设置这个view的滚动方向,我是让他垂直滚动,所以选中下面这个,如果垂直水平方向都滚动那么久都不用选了,设置一下view的宽高就行

用xib做scrollView的键盘自适应以及自动布局_第5张图片

然后很关键的一步就是,因为你设置的是上下滚动,你就要再设置一下他的高度,他才知道他在什么范围内滚动。

用xib做scrollView的键盘自适应以及自动布局_第6张图片

酱紫就大功告成了

用xib做scrollView的键盘自适应以及自动布局_第7张图片

下面我们说一下关于键盘的自适应

这个键盘自适应一般都是指监听文本框的输入然后不让键盘遮挡住文本框。所以呢,先要将文本框的代理设置为file‘s owner,遵守UITextFieldDelegate协议,监听键盘弹出和隐藏

先注册监听

  • (void)viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:self.view.window];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
    }

之后别忘了对称的移除监听

  • (void)viewWillDisappear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    }

然后根据键盘的frame设置scrollView的frame

  • (void)keyboardDidShow:(NSNotification *)notification {
    if (self.keyboardIsShown) {
    return ;
    }
    NSDictionary *info = [notification userInfo];
    NSValue *value = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [self.view convertRect:[value CGRectValue] fromView:nil];

    CGRect viewFrame = [self.scrollView frame];

    viewFrame.size.height -= keyboardRect.size.height;
    self.scrollView.frame = viewFrame;
    CGRect textFieldRect = [self.currentTextField frame];
    [self.scrollView scrollRectToVisible:textFieldRect animated:YES];
    self.keyboardIsShown = YES;
    }

-(void)keyboardDidHide:(NSNotification *)notification{
self.keyboardIsShown = NO;
}

然后实现UITextField的代理方法

  • (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentTextField = textField;
    }

  • (void)textFieldDidEndEditing:(UITextField *)textField {
    self.currentTextField = nil;
    }

  • (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
    }

搞定了

你可能感兴趣的:(用xib做scrollView的键盘自适应以及自动布局)