Как активировать 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