Высота UITableView, равная contentSize height
У меня есть представление прокрутки и внутри, если пара ярлыков и tableView. Я хотел бы, чтобы этот tableView прокручивался внешним scrollView, а не scrollView tableView, так что я сделал, чтобы установить ограничение для высоты tableView равным высоте contentSize. Но у меня есть проблема в том, что размер корректен только тогда, когда анимация нажатия завершена (и viewDidLayoutSubviews
мне звонят, наверное)
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tableHeightConstraint?.constant = tableViewController.tableView.contentSize.height
}
1 ответ
Размер содержимого будет обновлен с логикой просмотра прокрутки. Таким образом, макеты подпредставлений, безусловно, не достаточно. У меня есть один случай, когда я изменяю размер таблицы в зависимости от ее содержимого. Что я делаю, так это использую собственный размер (это приоритет сжатия в раскадровке). Я делю на подклассы табличное представление и переопределяю это:
override var contentSize:CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}
Остальное может быть сделано с ограничениями. В моем случае я не изменяю размеры дальше, тогда это супервизия, но ты делаешь то, что должен. Здесь все еще немного предостережения: если это не ограничено, вы уничтожаете функцию удаления из таблицы представления, и все ячейки могут быть загружены мгновенно, что может потребовать загрузки памяти и ЦП. Я бы избежал этого, если это возможно. А если нет, то следующим лучшим вариантом будет использование вертикального стека в представлении с прокруткой, которое должно дать тот же результат, который вы ожидаете.