Как активировать tableFor's heightForRowAtIndexPath после вызова viewDidLayoutSubviews?

tableViewCell содержит viewController, высота которого рассчитывается после того, как tableView закончит выкладывать виды. Так что мне нужно вызвать tableView снова запросить высоту строк, вызвав heightForRowAtIndexPath метод.

я пытался setNeedsLayout, не работает, система не будет звонить heightForRowAtIndexPath метод.

reloadData или же reloadRowsAtIndexPaths это не лучший выбор, потому что он перезагрузит все ячейки и все viewController, встроенные в ячейки, и снова, когда viewController закончит процесс разметки и viewDidLayoutSubviews называется, reloadData будет вызван снова, так что это бесконечный цикл.

Я тестировал tableView.beginUpdates() tableView.endUpdates() пустая операция обновления. Иногда это вызывает heightForRowAtIndexPathиногда нет.

2 ответа

heightForRowAtIndexPath: является частью протокола UITableViewDelegate и вызывается, когда вы выполняете:[tableView reloadData];

setNeedsLayout это метод UIView и заставляет представление перерисовывать себя, но это не вызовет tableView обновить себя.

Вы можете протестировать setNeedsDisplay в UIView, это перерисовает представление. Но setNeedsLayout используется для разметки подпредставлений (позиция и размер). При перерисовке размер получится из функции делегата.

смотрите setNeedsLayout и setNeedsDisplay

Другие вопросы по тегам