Получить правильную высоту таблицы во всплывающем окне после отображения/скрытия дополнительной ячейки

Я показываю UITableView в UIPopoverController. Это табличное представление скрывает/показывает некоторые ячейки при нажатии на другую ячейку (сравните с это руководство). Поскольку это всплывающее окно, я хочу адаптировать размер всплывающего окна. Поэтому я хочу использовать анимацию с preferredContentSize.

Теперь проблема в том, что если я вычисляю contentSize, я не получаю фактический размер, потому что потом вызывается heightForRowAtIndexPath. Мне нужна высота представления таблицы после перезагрузки представления таблицы или обнаружения изменения высоты представления таблицы.

Как я могу получить правильную высоту представления таблицы, чтобы адаптировать размер всплывающего окна?

Возможные обходные пути:

  1. прокрутите позицию новой ячейки
  2. никогда не скрывает ячейки
  3. показать всплывающее окно в полном размере
  4. рассчитать размеры вручную

Но все обходные пути имеют некоторые недостатки/ограничения. № 1 выглядит не очень хорошо, № 2 плохо работает для меня в ландшафтном режиме (другой контент может быть пропущен), № 3 выглядит не очень хорошо, а также другой контент может быть пропущен, а № 4 будет работать, если я знаю обо всех возможных случаях.

Все еще ищет лучшее решение.


person testing    schedule 14.11.2014    source источник
comment
Как насчет numberOfRows + hightOfRow?   -  person Kampai    schedule 14.11.2014
comment
Можно вручную рассчитать высоту представления таблицы. Я подумал о некоторых автоматических вычислениях, таких как contentSize. Другим обходным решением было бы использование scrollToRowAtIndexPath. Подходы, которые я видел для обнаружения события завершения загрузки, у меня не сработали (willDisplayCell, didEndDisplayingCell, ...).   -  person testing    schedule 14.11.2014


Ответы (1)


За меня это сделал только ручной расчет высоты. Мой код написан на С#, и вот что я сделал:

Я использовал переменную класса, в которой я сохранил фактическую высоту. В viewDidLoad у меня есть это

TableView.LayoutIfNeeded ();
height = TableView.ContentSize.Height;
this.PreferredContentSize = new SizeF (320f, height);

В showDatePickerCell и в hideDatePickerCell я рассчитываю новую высоту и устанавливаю ее для поповера:

UIView.Animate (
    0.25,
    animation: () => {
        height += 206f;
        this.PreferredContentSize = new SizeF (320f, height);
    }
);

Теперь всплывающее окно расширяется и сжимается по желанию.

person testing    schedule 14.11.2014