изменение размера UIScrollView с блоком Animation перемещает начало координат

, я прокручиваю UIScrollView вверх, если клавиатура скроет UITextField. Я уменьшаю высоту UIScrollView, если он будет прикрыт, что отлично работает. но когда я пытаюсь увеличить высоту UIScrollView (вернуться к исходному размеру), весь UIScrollView перемещается вверх, а затем анимируется до исходного размера и местоположения. начало координат перемещается вверх на величину X и опускается туда, где оно должно быть, вместо высоты представления, расширяющегося вниз.

- (void)keyboardWillShow:(NSNotification *)n
{
    keyboardMove = self.rightScrollView.frame;
    offsetMove = self.rightScrollView.contentOffset;

    NSDictionary* userInfo = [n userInfo];

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

    [UIView animateWithDuration:.25
                          delay:0
                        options:(UIViewAnimationOptionAllowUserInteraction)
                     animations:^
                     {
                         self.rightScrollView.frame = CGRectMake(self.rightScrollView.frame.origin.x, self.rightScrollView.frame.origin.y, self.rightScrollView.frame.size.width, (self.view.frame.size.height - (self.rightScrollView.frame.origin.y + keyboardSize.height)));
                     }
                     completion:nil];

    if ((activeTextField.frame.origin.y + activeTextField.frame.size.height) > self.rightScrollView.frame.size.height)
    {        
        float contentOffsetMove = (self.rightScrollView.contentOffset.y + (activeTextField.frame.origin.y - self.rightScrollView.frame.size.height) + activeTextField.frame.size.height + 10);

        self.rightScrollView.contentOffset = CGPointMake(self.rightScrollView.contentOffset.x, contentOffsetMove);
    }
}

- (void)keyboardWillHide:(NSNotification *)n
{
    if ((activeTextField.frame.origin.y + activeTextField.frame.size.height) > self.rightScrollView.frame.size.height)
    {
        [UIView animateWithDuration:.25
                              delay:0
                            options:(UIViewAnimationOptionAllowUserInteraction)
                         animations:^{
                             [self.rightScrollView setContentOffset:offsetMove animated:YES];

                             self.rightScrollView.frame = keyboardMove;
                         }
                         completion:nil];

    }
    else
    {
        [UIView animateWithDuration:.25
                              delay:0
                            options:(UIViewAnimationOptionAllowUserInteraction)
                         animations:^{
                             self.rightScrollView.frame = keyboardMove;
                         }
                         completion:nil];
    }
}

поэтому, когда клавиатура скрывается, self.rightScrollView.origin перемещается на X точек, а затем анимируется в нужное место. Мне нужно, чтобы начало координат оставалось на месте, а высота стала больше (растет вниз).

есть идеи, почему он ведет себя глупо?

5
задан Padin215 17 January 2012 в 21:08
поделиться