UITableView не будет прокручиваться после редактирования кадра просмотра и источника

Я пытаюсь реализовать UITextView в ячейке таблицы внизу табличного представления.

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

Вот что я добавил к предыдущему решению, чтобы перенести его в свое приложение.

-(void) keyboardWillShow:(NSNotification *)note {
      CGRect frame = self.view.frame;
      frame.size.height += keyboardHeight;
      frame.origin.y -= keyboardHeight;
        self.view.frame = frame;
}

-(void) keyboardWillHide:(NSNotification *)note
{
        CGRect frame = self.view.frame;
        frame.size.height -= keyboardHeight;
    frame.origin.y += keyboardHeight;

}

Это правильно добавит высоту к представлению и прокрутит до ячейки, но после восстановления исходной высоты представления прокрутка за пределы текущего видимого представления становится невозможной, даже если за пределами границ находится допустимый контент (я вижу текстовое представление до полоса прокрутки возвращается).
Если я попытаюсь сохранить рамку или границы табличного представления (не представления) в клавиатуреWillShow и восстановить их в клавиатуреWillHide, прокрутка будет восстановлена, но представление будет сокращено вдвое.

Есть ли какие-либо средства для этого, кроме жесткого кодирования дополнительной высоты в нижней части представления?


person oohaba    schedule 03.12.2009    source источник


Ответы (1)


Мне удалось решить проблему заблокированной прокрутки, удалив код, который редактирует происхождение представления. Кроме того, я реализовал прокрутку до нижней ячейки, используя в своих вычислениях свойство tableview contentSize.

-(void) keyboardWillShow:(NSNotification *)note
{

  if(!isKeyboardShowing)
    {
    isKeyboardShowing = YES;
    CGRect keyboardBounds;
    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardBounds];
    CGFloat keyboardHeight = keyboardBounds.size.height;

            CGRect frame = self.view.frame;
            frame.size.height += keyboardHeight;
            self.view.frame = frame;

    CGPoint scrollPoint = frame.origin;
    scrollPoint.y += _tableView.contentSize.height - keyboardHeight;
    [_tableView setContentOffset:scrollPoint animated:YES];
    }
}
person oohaba    schedule 08.12.2009