Как я могу установить смещение содержимого и изменить высоту UIScrollview одновременно - PullRequest
4 голосов
/ 05 марта 2011

Я пытаюсь прокрутить вверх UISCrollView, когда отображается клавиатура

. Я использую setContentOffset, чтобы сдвинуть uiview вверх.

В то же время я хочу уменьшить высоту моего UISCrollView до (высота просмотра - высота клавиатуры), чтобы можно было прокручивать весь просмотр содержимого.

Я применяю обаИзменения в уведомлении клавиатурыWillShow

Когда я фактически поднимаю клавиатуру в своем приложении, содержимое сначала перемещается вверх, а затем вниз (что дает эффект мерцания).Я пытаюсь сгладить оба преобразования за один раз ..

Возможно ли это?

Код ниже ---

- (void) keyboardWillShow {
   CGPoint contentOffset = scrollView.contentOffset;

    CGRect scrollViewFrame = scrollView.frame;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];

    if (contentOffset.y >= 0 && contentOffset.x >= 0) {
        isContentOffset = YES;
        contentOffset.y += screenShift;
        [scrollView setContentOffset:contentOffset animated: NO];
    }

    scrollViewFrame.size.height = keyboardOrigin.y - self.view.frame.origin.y - toolbarHeight;
    scrollView.frame = scrollViewFrame;
    [UIView commitAnimations];
}

Ответы [ 4 ]

3 голосов
/ 05 марта 2011

Существует опция для анимации, когда вы устанавливаете ContentOffset для анимации.Вот код, который я использую все время

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    svos = scrollView.contentOffset;
    CGRect rect = [textView bounds];
    rect = [textView convertRect:rect toView:self.scrollView];
    CGPoint point = rect.origin ;
    point.x = 0 ;
    [self.scrollView setContentOffset:point animated:YES];
    doneButton.enabled = YES;
}

- (IBAction)donePressed
{
    [scrollView setContentOffset:svos animated:YES]; 
    [textview resignFirstResponder];
    doneButton.enabled = NO;
}

Он прекрасно работает для меня.

1 голос
/ 05 марта 2011

Оборачиваете ли вы эти изменения в анимационный блок?

[UIView beginAnimations:@"resizeScroll" context:nil];
// make your changes to set and content offset
[UIView commitAnimations];
0 голосов
/ 10 марта 2011

Разобрался с проблемой ...

Когда нажали кнопку на клавиатуре, я выполнял функцию сталFirstResponder, за которым следовал resignFirstResponder в представлении клавиатуры.Это привело к появлению клавиатурыWillShow, за которым последовало сообщение клавиатурыWillHide и другое сообщение клавиатурыWillShow, в результате которого клавиатура поднялась, снова вернулась и снова поднялась.

Спасибо всем, кто пытался помочь ... и извините, проблема была совсем другой...

0 голосов
/ 06 марта 2011

Я думаю, у меня есть решение для этого. Вы можете обрабатывать изменение размера в методе textViewDidBeginEditing. Вы можете просто изменить размер кадра scrollView на половину на

CGRect tframe = myscrollView.frame;
tframe.size.height/=2;
myscrollView.frame = tframe;

и чтобы инициализировать или обработать общую длину просмотра прокрутки, вы можете установить contentSize scrollView аналогично тому, как был установлен кадр в приведенном выше фрагменте. например

CGSize tsize = self.view.frame.size;
//here you can change the height and width of the scrollView
myscrollView.contentSize = tsize;

Надеюсь, это поможет тебе. Если это так, пожалуйста, свяжитесь.

...