Высота 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)
}

Остальное может быть сделано с ограничениями. В моем случае я не изменяю размеры дальше, тогда это супервизия, но ты делаешь то, что должен. Здесь все еще немного предостережения: если это не ограничено, вы уничтожаете функцию удаления из таблицы представления, и все ячейки могут быть загружены мгновенно, что может потребовать загрузки памяти и ЦП. Я бы избежал этого, если это возможно. А если нет, то следующим лучшим вариантом будет использование вертикального стека в представлении с прокруткой, которое должно дать тот же результат, который вы ожидаете.

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