Цель и фон
Я пытаюсь создать расширяемый UITableView, используя этот учебник . Однако я хочу, чтобы таблица обновила высоту своего контейнера, чтобы новая высота соответствовала содержимому. Проблема в том, что это создает визуальный сбой в последнем заголовке (разделе) таблицы, но только при первом запуске анимации.
Вот как это выглядит: ссылка
Я думаю, что когда таблица расширяет скрытые ячейки, последний ряд выталкивается из поля зрения. Поэтому, когда я обновляю высоту вида, он должен перерисовать последнюю ячейку (обратите внимание на изменение цвета при перезагрузке). Я не уверен, откуда взялась странная слайд-анимация.
Вопрос
Как бы я убрал этот глюк или лучше выполнил sh эту задачу?
Код
Вот моя иерархия:
+-- ParentVC
| +-- ParentView
| | +-- CustomTableVC's View
| | | +-- Custom UITable
(CustomTableVC is a child of ParentVC)
Вот так я перезагружаю отрезанный участок и устанавливаю новую высоту
// === CustomTableVC === //
func toggleSection(_ header: PTTableHeader, section: Int) {
...
// Reload the section with a drop-down animation
table.reloadSections(NSIndexSet(index: section) as IndexSet, with: .automatic)
// Update the height of the container view
preferredContentSize.height = table.contentSize.height
}
// Height for section headers and rows: 44 (including estimated)
А вот как родитель обновляется:
// === ParentVC === //
override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
super.preferredContentSizeDidChange(forChildContentContainer: container)
if let child = container as? PTTable {
customTableVC.view.layoutIfNeeded()
customTableViewHeightAnchor.constant = child.preferredContentSize.height
UIView.animate(withDuration: 3, animations: {
view.layoutIfNeeded()
})
}
// Height anchor starts at parentView's height / 3 because
// I'm not sure how to make it match the table's contentSize from the get-go
}
Удаление view.layoutIfNeeded()
приводит к тому, что последний раздел не выполняет анимацию вставки, но все равно сбрасывает .
Работает на iPhone 11 Pro (симулятор).