Изменить размер TableCell при выборе / отмене выбора

Я новичок в iOS и MonoTouch, и у меня есть довольно базовая потребность - у меня есть два совершенно разных представления для отображения в одной ячейке таблицы в зависимости от того, выбран он или нет. Когда вы загрузите приложение, я представлю список продуктов в пользовательском UITableView со всеми невыбранными строками, и каждая строка будет просто отображать названия продуктов в метке. Как только пользователь нажимает на одну из строк и выбирает ее, я показываю совершенно другое представление с большим количеством макетов корзины для покупок. Поскольку эти два вида очень разные, они имеют совершенно разные размеры. Мне нужно, чтобы сама ячейка (или строка?) Росла и сужалась в соответствии с естественной высотой любого отображаемого в данный момент вида.

Я использую потомков UITableViewController, UITableViewSource и UITableViewCell для решения. Что я делаю, так это добавляю обе версии в ContentView ячейки, а затем устанавливаю свойство Hidden по мере необходимости, когда ячейка / строка выбрана / снята, чтобы показать правильный макет. Это хорошо работает. Сейчас я нахожусь в демонстрационном режиме, так что я не слишком беспокоюсь об эффективности или быстроте реагирования, которые придут позже.

Я знаю, что GetHeightForRow отвечает за определение размера строк, но он вызывается только один раз, когда ячейка отображается впервые. Мне кажется, что мне нужно предупредить TableView, чтобы повторно опросить источник для нового размера, поскольку представления меняются, но я не могу понять, как это сделать.

Я попытался (весьма надеюсь) снова вызвать GetHeightForRow вручную, используя Cell.SetNeedsLayout и Cell.SetNeedsDisplay, надеясь, что это заставит таблицу повторно запросить источник для новых измерений, но без радости.

Я возился с прямым подходом, пытаясь измерить сам контент-контент, но мне не показалось, что он ведет куда-то. Я чувствую, как будто таблицу нужно попросить запросить новый размер строки, но я открыт для любых предложений.

Конечно, я не первый, кто пытается это сделать? Что мне не хватает?

1 ответ

Решение

Попробуй заставить GetHeightForRow чтобы быть вызванным снова, вызывая ReloadRows вместо этого.

Вы можете или не должны указывать начало / конец обновления (хотя это может быть только для анимации?)

tableView.BeginUpdates();
tableView.EndUpdates();
Другие вопросы по тегам