UITableView.ScrollRectToVisible() не прокручивается вниз

У меня есть табличное представление, содержащее переменное количество разделов и пользовательских ячеек. В некоторых случаях размер ячейки может изменяться в RowSelected(). Всякий раз, когда это происходит, я также хотел бы убедиться, что ячейка полностью видна после изменения ее размера (увеличения).

У меня это работает в другой таблице, которая просто изменяет базовые данные, чтобы источник табличного представления предоставлял большую ячейку. Затем я перезагружаю ячейку и прокручиваю ее так:

// Modify data
//...

// Reload cell
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);
tableView.ScrollRectToVisible(tableView.CellAt(indexPath).Frame, true);

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

Затем события вызывают метод для перезагрузки ячейки:

void updateCell() {
  if (cell.Superview != null) {
    UITableView tableView = (UITableView)cell.Superview;
    tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);

    // Get the new (possibly enlarged) frame
    RectangleF frame = tableView.CellAt(indexPath).Frame;
    Console.WriteLine("This really is the new large frame, height: {0}", frame.Height);

    // Try to scroll it visible
    tableView.ScrollRectToVisible(frame, true);
  }
}

Это отлично прокручивается для всех ячеек, кроме самой нижней. Это только делает видимой старую рамку этой ячейки. Я дважды проверил, что он действительно предоставляет новую рамку ячейки для ScrollRectToVisible().

Таким образом, кажется, что ScrollRectToVisible() привязан к старому размеру содержимого таблицы - даже после перезагрузки строк. Я попытался обойти это, предоставив новый размер контента с рассчитанной разницей в высоте. Это работает, но кажется мне действительно хакерским.

Есть ли какой-то более чистый способ сделать что-то?

заранее спасибо


person riha    schedule 13.04.2011    source источник
comment
возможный дубликат stackoverflow.com/questions/594181/   -  person Soner Gönül    schedule 13.04.2011
comment
Не могли бы вы поделиться своим кодом? Я хочу показывать только 3 ячейки всякий раз, когда пользователь прокручивает таблицу, и если прокрутка заканчивается между ними, вместо того, чтобы показывать ячейки вырезания, я хотел бы показывать полные ячейки, проверяя индекс соседних ячеек. Любое предложение для этого ?   -  person Ajay Sharma    schedule 08.11.2011


Ответы (1)


Вместо этого используйте это:

tableView.ScrollRectToVisible(_: animated: )

Используйте его для прокрутки UITableView до нижней строки:

tableView.scrollToRow(at: at: animated: )
person Community    schedule 14.04.2011