Autolayout Constraint - Keyboard

后端 未结 4 1170
迷失自我
迷失自我 2020-12-22 19:05

Im stuck trying to animate a table view smoothly which has an autolayout contraint. I have a reference to the constraint \"keyboardHeight\" in my .h and have linked this up

4条回答
  •  不思量自难忘°
    2020-12-22 19:43

    The approach I took is to add a view which follows the size of the keyboard. Add it below your tableview, or text input or whatever and it will push things up when the keyboard appears.

    This is how I set up the view hierarchy:

    NSDictionary *views = @{@"chats": self.chatsListView, @"reply": self.replyBarView, @"fakeKeyboard":self.fakeKeyboardView};
    [self.view addVisualConstraints:@"V:|-30-[chats][reply][fakeKeyboard]|" views:views];
    

    And then the key bits of the keyboard-size-following view look like this:

    - (void)keyboardWillShow:(NSNotification *)notification
    {
        // Save the height of keyboard and animation duration
        NSDictionary *userInfo = [notification userInfo];
        CGRect keyboardRect = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
        self.desiredHeight = CGRectGetHeight(keyboardRect);
        self.duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    
        [self animateSizeChange];
    }
    
    - (void)keyboardWillHide:(NSNotification *)notification
    {
        self.desiredHeight = 0.0f;
    
        [self animateSizeChange];
    }
    
    - (CGSize)intrinsicContentSize
    {
        return CGSizeMake(UIViewNoIntrinsicMetric, self.desiredHeight);
    }
    
    - (void)animateSizeChange
    {
        [self invalidateIntrinsicContentSize];
    
        // Animate transition
        [UIView animateWithDuration:self.duration animations:^{
            [self.superview layoutIfNeeded];
        }];
    }
    

    The nice thing about letting this particular view handle its resizing is that you can let the view controller ignore it, and you can also re-use this view any place in your app you want to shift everything up.

    The full file is here: https://gist.github.com/shepting/6025439

提交回复
热议问题